前提
已经安装并启动了nacos-server服务端。
整合
创建一个maven工程并引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.7.RELEASE</version>
</dependency>
<!-- springcloud nacos 客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
创建bootstrap.properties来配置nacos config相关配置。
#配置nacos config服务端地址
spring.cloud.nacos.config.server-addr=127.0.0.1:12580
#名称空间
spring.cloud.nacos.config.namespace=fe06ce62-aef9-4b78-b0cd-512e4bc56e3c
#组
spring.cloud.nacos.config.group=NACOS-TEST-GROUP
#配置格式,目前只支持yaml和properties
spring.cloud.nacos.config.file-extension=YAML
#应用名称
spring.application.name=nacos-cloud-demo
创建application.properties配置文件:
#端口
server.port=9999
#环境
spring.profiles.active=dev
#spring创建bean时是否允许同名覆盖,设置为true
spring.main.allow-bean-definition-overriding=true
创建controller类:
@RestController
@RequestMapping("/nacos-cloud")
//实现动态刷新的注解
@RefreshScope
public class NacosCloudDemoController {
//spring的@Value注解,:冒号后面填写配置不存在获取失败时的默认值
@Value("${nacos-cloud.info:默认值}")
private String info;
@GetMapping("/project-info")
public String projectInfo(){
return info;
}
}
启动类:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext = SpringApplication.run(Application.class, args);
}
}
nacos DataId完整的配置的规则:
${prefix}-${spring.profiles.active}.${file-extension}
prefix默认是 应用名 spring.application.name,也可以配置自己的值,配置项是spring.cloud.nacos.config.prefix。
spring.profiles.active是springboot配置的启动环境。
file-extension默认是properties,可以通过spring.cloud.nacos.config.file-extension 来配置,目前只支持yaml和properties。
我上面的配置是:
spring.profiles.active=dev
spring.cloud.nacos.config.file-extension=YAML
所以创建的配置文件的dataId应该为 nacos-cloud-demo-dev.YAML
启动项目访问:成功,并且在控制台修改配置的值并更新的话,可以实现动态刷新,此处就不贴出来了。
特殊情况一:
当springboot工程没有配置spring.profiles.active环境,那么,此时的dataId就变为
${prefix}.${file-extension}
特殊情况二:
当springboot工程配置了spring.profiles.active=dev,但是nacos服务器没有dataId为
nacos-cloud-demo-dev.YAML的配置,但是有nacos-cloud-demo.YAML,也会退而求其次,获取到nacos-cloud-demo.YAML的配置,但是如果两个dataId的配置都有,就优先获取到的配置是nacos-cloud-demo-dev.YAML。