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环境配置

 

原文地址:https://www.cnblogs.com/WarBlog/p/15407476.html