美文网首页
Nacos 配置应用于分布式系统

Nacos 配置应用于分布式系统

作者: CodeYang | 来源:发表于2021-08-22 09:45 被阅读0次

    一、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. 这时我们发现可以实现动态货获取

    相关文章

      网友评论

          本文标题:Nacos 配置应用于分布式系统

          本文链接:https://www.haomeiwen.com/subject/cdwfiltx.html