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

动态刷新

  1. 这时我们修改配置中心的值,看是否能够动态刷新属性值。
  2. 再次读取发现不能动态获取到属性值。
  3. 如果我们需要动态更新的话,需要使用另外一个方案 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;
    }
}
  1. 这时我们发现可以实现动态货获取
上一篇下一篇

猜你喜欢

热点阅读