zoukankan      html  css  js  c++  java
  • Nacos配置管理

    Nacos注册中心提供服务注册发现,在真实开发中一个项目会有很多微服务实例,每个微服务实例中都有自己独立的配置,如果有一个配置是多个微服务中都需要使用的话,就需要配置每一个微服务实例,并且还要重启这些微服务实例。

    Nacos不仅有注册中心还有配置管理,Nacos配置管理可以完成统一配置、配置热更新

    Nacos配置管理

    添加Nacos配置管理依赖

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>

    统一配置管理

    统一配置是指配置信息可以被多个微服务实例使用

    新建统一配置

    读取统一配置

    springboot项目启动时读取本地application.yaml文件,然后实现自动装配

    现在需要把Nacos配置信息读取并读取,读取Nacos配置信息步骤:

    1. 读取Nacos配置信息必须在读取application.yaml配置文件之前完成(bootstrap.yml这个文件是引导文件,优先级高于application.yml)
    2. 读取Nacos配置信息之前知道Nacos地址和配置信息Id

    通过bootstrap.yml配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个配置信息

    spring:
      application:
        name: userservice
      profiles:
        active: dev
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848
          config:
            file-extension: yaml

    通过Value注解将pattern.dateformat配置注入到Controller中做测试

    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UserController {
        @Value("${pattern.dateformat}")
        private String dateFormat;
    
        @GetMapping("/now")
        public String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateFormat, Locale.CHINA));
        }
    }

      

    配置热更新

    Nacos中的配置信息变更后,微服务实例无需重启就可以的获取变更后的配置

    方式一:通过@Value注解注入,结合@RefreshScope来刷新(在@Value注入的变量所在类上添加注解@RefreshScope)

    @RefreshScope
    public class UserController {
        @Value("${pattern.dateformat}")
        private String dateFormat;
        
        .... ....
    }

    修改Nacos配置

    没有重启微服务实例前提下访问 http://localhost:8081/user/now

    方式二:通过@ConfigurationProperties注入,自动刷新(推荐

    @Data //lombok,提供get、set方法
    @Component //将被标记的类注册成spring容器的Bean
    @ConfigurationProperties(prefix = "pattern")//采用约定大于配置的方式:类中属性和配置中的属性(pattern.dateformat)一致,就可以完成属性的自动更新
    public class PatternProperties {
        private String dateformat;
    }

    依赖注入PatternProperties对象

    @Slf4j
    @RestController
    @RequestMapping("/user")
    //@RefreshScope
    public class UserController {
    
    //    @Value("${pattern.dateformat}")
    //    private String dateFormat;
    
        @Autowired
        private PatternProperties patternProperties;
    
        @GetMapping("/now")
        public String now(){
            return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat(), Locale.CHINA));
        }
    }

    重启微服务实例

    修改Nacos配置信息

    访问 http://localhost:8081/user/now

    多环境共享配置

    微服务启动时会从nacos读取多个配置文件:

    • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
    • [spring.application.name].yaml,例如:userservice.yaml

    无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件

    Java配置类关联配置信息

    @Data //lombok,提供get、set方法
    @Component //将被标记的类注册成spring容器的Bean
    @ConfigurationProperties(prefix = "pattern")//采用约定大于配置的方式,类中属性和配置文件中的属性一致,就可以完成属性的自动更新
    public class PatternProperties {
        private String dateformat;
        private String evnShared;
    }

    获取信息

        @Autowired
        private PatternProperties patternProperties;
        
        @GetMapping("/properties")
        public PatternProperties properties(){
            return patternProperties;
        }

    指定微服务的活动环境

    重启微服务实例,访问8081和8083

     

    优先级:

      [服务名]-[环境].yaml >[服务名].yaml > 本地配置

    本地配置

    Java配置类关联配置信息

    @Data //lombok,提供get、set方法
    @Component //将被标记的类注册成spring容器的Bean
    @ConfigurationProperties(prefix = "pattern")//采用约定大于配置的方式,只要类中属性和配置文件中的属性一致,就可以完成属性的自动更新
    public class PatternProperties {
        private String dateformat;
        private String evnShared;
        private String name;
    }

    Nacos共享配置

    Nacos环境配置

     

  • 相关阅读:
    VMware coding Challenge: Coin Toss Betting
    Lintcode: k Sum II
    Lintcode: Interleaving Positive and Negative Numbers
    Lintcode: Insert Node in a Binary Search Tree
    Amazon OA
    Leetcode: Best Time to Buy and Sell Stock IV
    Leetcode: Reverse Words in a String II
    Leetcode: Repeated DNA Sequence
    Leetcode: Rotate Array
    VMware coding Challenge:Date of Weekday
  • 原文地址:https://www.cnblogs.com/WarBlog/p/15407476.html
Copyright © 2011-2022 走看看