一、nacos实现配置管理
1.1 统一配置管理
在微服务搭建中,每个微服务中的业务都需要去完成数据库查询,并且服务之间还会完成相互调用,而要完成相互调用,需要将每个服务都注册到服务中心,消费者就可以从服务中心完成注册发现实现服务获取和负载均衡,完成远程调用,随着服务的增多,可能会有数十上百上千条这种情况,这时就需要对配置文件进行修改,这个配置文件可能跟数十上百上千条微服务都有关系,这时就需要逐个去修改配置,会非常麻烦,而且在配置完后,还需要对每个服务进行重启,而进行统一配置管理后只需要对一个配置文件进行修改即可,通过配置管理服务就可以实现在修改完配置文件后不需要重启服务就可以使用,配置管理服务是通过在服务启动时先去读取配置管理服务上的配置,再和本地的配置进行结合作为完整配置进行使用
1.1 nacos完成配置管理
- 在nacos中添加配置信息:
- 填写配置信息:
- 发布:
二、微服务配置拉取
统一配置完成后,在微服务项目启动时,就需要对该配置进行拉取,即项目启动时,要先读取nacos中的配置文件,那么就需要获取nacos的地址,而nacos的地址在本地配置文件中,要想提前知道nacos地址,就需要创建一个名为bootstrap.yml
的文件,这个文件的优先级比本地配置文件properties.yml
文件高很多,所以将nacos地址的相关配置加在bootstrap.yml中就可以提前加载nacos地址从而访问nacos配置文件了。
2.1 引入Nacos的配置管理客户端依赖
<!--nacos的配置管理依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2.2 在resource目录添加引导文件bootstrap.yml
spring: application: name: userservice # 服务名称 profiles: active: dev # 开发环境,这里是dev cloud: nacos: server-addr: localhost:8848 # nacos地址 config: file-extension: yaml #文件后缀名
2.3 验证(读取nacos中的配置信息)
- nacos的配置信息
pattern: dateformat: yy-MM-dd HH:mm:ss
- 在userservice的Controller中读取当前时间信息,通过该配置展现出来
@Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; @GetMapping("now") public String now() { return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } }
三、实现配置热更新
3.1 通过@Value注解注入,结合@RefreshScope
@Slf4j @RestController @RequestMapping("/user") @RefreshScope public class UserController { @Autowired private UserService userService; @Value("${pattern.dateformat}") private String dateformat; @GetMapping("now") public String now() { return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); } }
3.2 通过@ConfigurationProperties注入,自动刷新
@Data @Component @ConfigurationProperties(prefix = "pattern") public class PatternProperties { private String dateformat; }
@Slf4j @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @Autowired private PatternProperties patternProperties; @GetMapping("now") public String now() { return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat())); } }
四、多环境配置
4.1 [服务名]-[spring.profile.actie].yaml,环境配置
pattern: dateformat: yy/MM/dd HH:mm:ss name: 环境配置dev
4.2 [服务名].yaml,多环境共享,默认配置
pattern: envSharedValue: 环境共享属性值 name: 环境共享属性值default
4.5 本地配置
pattern: name: 本地环境local
优先级:[服务名]-[spring.profile.actie].yaml > [服务名].yaml > 本地配置