Nacos 配置应用于分布式系统
2021-08-22 本文已影响0人
CodeYang
一、Nacos 配置中心,写入属性值
配置属性.png二、项目引入 Nacos 配置中心依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
三、配置信息修改 bootstrap.yml ( bootstartp.yml 加载顺序优于 application.yml )。
注意namespace,group ,dataid(等于application 的 name+file-extension )要和配置中心一致
server:
port: ${prot:8001} #未设置时,默认为8001
spring:
application:
name: cloud-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置服务发现地址
config:
namespace: b9f2ac71-2a0b-4773-a2b2-f0554888ded2 #命名空间
group: TEST_GROUP #分组
file-extension: yml #文件格式 dataid 的名称是 application 的 name+file-extension
server-addr: localhost:8848 #配置中心地址
四、controller 通过 @Value 注解注入
@RestController
public class ProviderController {
@Value("${server.port}")
private String port;
@Value("${common.name}")
private String content;
@RequestMapping("/provider/hello/{name}")
public String hello(@PathVariable("name") String name){
return name+" Welcome To ProviderController "+port+" "+content;
}
}
五、测试程序是否正确读取配置中心的配置,读取成功
测试.png动态刷新
- 这时我们修改配置中心的值,看是否能够动态刷新属性值。
- 再次读取发现不能动态获取到属性值。
- 如果我们需要动态更新的话,需要使用另外一个方案 ConfigurableApplicationContext 上下文。
@RestController
public class ProviderController {
@Value("${server.port}")
private String port;
/*
//不支持动态更新
@Value("${common.name}")
private String content;*/
//注入配置文件上下文
@Resource
private ConfigurableApplicationContext applicationContext;
@RequestMapping("/provider/hello/{name}")
public String hello(@PathVariable("name") String name){
String content = applicationContext.getEnvironment().getProperty("common.name");
return name+" Welcome To ProviderController "+port+" "+content;
}
}
- 这时我们发现可以实现动态货获取