Nacos 注册中心使用
首先创建一个 nacos-demo ,项目父工程 pom.xml 文件
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dong</groupId>
<artifactId>nacos-demo</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>nacos-web</module>
<module>nacos-web-example</module>
</modules>
<!-- Spring boot 版本信息 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/>
</parent>
<properties>
<!-- Environment Settings -->
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- Spring Cloud 版本信息 -->
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
<!-- Spring Cloud Alibaba 版本信息 -->
<spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
</properties>
<dependencies>
<!-- nacos注册中心依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 监控检查-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--springboot-test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
nacos-web 工程添加配置文件 bootstrap.yml
yml
spring:
application:
name: nacos-web
cloud:
nacos:
discovery:
server-addr: 192.168.238.128:8848 # 你的 nacos 服务地址
server:
port: 9100
#配置 Spring Boot Actuator 端点的部分(访问健康监控状态)
management:
endpoints:
web:
exposure:
include: "*"
nacos-web 工程添加启动类
java
@SpringBootApplication
@EnableDiscoveryClient // 声明它是注册中心的客户端
public class NacosWebApplication {
public static void main(String[] args) {
SpringApplication.run(NacosWebApplication.class,args);
}
}
启动后到 nacos 服务列表中查看
Nacos 配置中心使用
在顶级父工程添加依赖
xml
<!-- nacos配置中心依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
bootstrap.yml
yml
spring:
application:
name: nacos-web
cloud:
nacos:
discovery:
server-addr: 192.168.238.128:8848 # 你的 nacos 服务地址
config:
server-addr: 192.168.238.128:8848
file-extension: yml #指定文件扩展名,默认为properties
server:
port: 9600
#配置 Spring Boot Actuator 端点的部分(访问健康监控状态)
management:
endpoints:
web:
exposure:
include: "*"
配置文件名称 : 默认和 spring.application.name一致
文件后缀 :默认是 properties
配置完后点击发布
增加一个 Controller 测试类 InfoController
java
package com.dong.nacos.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class InfoController {
@Value("${server.port}")
private String port;
@Value("${key:''}")
private String key;
@Value("${commonKey:''}")
private String commonKey;
@Value("${shareInfo:''}")
private String shareInfo;
@GetMapping(value = "/echo/{message}")
public String echo(@PathVariable(value = "message") String message) {
return "Hello Nacos Discovery " + message + ", i am from port " + port;
}
@GetMapping(value = "/config")
public String config() {
return "Hello Nacos Config get "+key +" getCommonValue: "+commonKey+" getShareInfo: "+shareInfo;
}
}
重启 nacos-web 服务,测试config接口:http://127.0.0.1:9100/config,结果如下图说明配置成功
动态刷新
Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher
的 refresh 方法 。
如果需要对 Bean 进行动态刷新,参照 Spring 和 Spring Cloud 规范。推荐给类添加 @RefreshScope
进行自动刷新
java
package com.dong.nacos.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RefreshScope
public class InfoController {
@Value("${server.port}")
private String port;
@Value("${key:''}")
private String key;
@Value("${commonKey:''}")
private String commonKey;
@Value("${shareInfo:''}")
private String shareInfo;
@GetMapping(value = "/echo/{message}")
public String echo(@PathVariable(value = "message") String message) {
return "Hello Nacos Discovery " + message + ", i am from port " + port;
}
@GetMapping(value = "/config")
public String config() {
return "Hello Nacos Config get "+key +" getCommonValue: "+commonKey+" getShareInfo: "+shareInfo;
}
}
多环境支持
nacos可以同时支持多环境配置。只需要在nacos配置中心中根据dataId进行区分即可。dataId 完整的拼接格式如下
bash
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profilefile-extension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。 目前只支持properties
类型。
修改 bootstrap.yml
yml
spring:
application:
name: nacos-web
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 192.168.238.128:8848 # 你的 nacos 服务地址
config:
server-addr: 192.168.238.128:8848
file-extension: yml #指定文件扩展名,默认为properties
prefix: nacos-web #指定配置文件的前缀
shared-dataids: common.yml #添加共享配置文件的 dataId,多个以逗号分隔,越靠后,优先级越高
refreshable-dataids: common.yml #对那些共享配置文件进行动态刷新,多个以逗号分隔
server:
port: 9100
#配置 Spring Boot Actuator 端点的部分(访问健康监控状态)
management:
endpoints:
web:
exposure:
include: "*"
新建一个配置文件
访问结果