学习spring cloud记录9-nacos深一步学习
前言
统一配置管理将各个服务的配置管理起来,如果发生变化,可以主动向服务发送信息。配置管理服务也在nacos中。
配置热更新
在配置列表新建配置
发布后,这个配置已经进入统一配置管理
服务配置拉去
项目先读取nacos的配置文件,然后再读取本地的配置文件。bootstrap.yml文件要比application.yml的优先级高,所以可以把nacos的地址等信息文件内容移到bootstrap.yml
引入nacos配置管理依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
然后新建bootstrap.yml文件,配置nacos信息,然后把application.xml重复的信息删除
spring:
application:
name: demo-user
profiles:
active: dev
cloud:
nacos:
server-addr: localhost:8848
config:
file-extension: yaml
测试是否能够读取到nacos信息
先查看nacos中的配置是什么样的
名称为demo-user-dev.yaml,内容为
pattern:
dateformat: yyyy-MM-dd HH:mm:ss
启动时报错Param 'serviceName' is illegal, serviceName is blank,因为spring-cloud-dependencies 2020.0.0 版本不在默认加载bootstrap 文件,如果需要加载bootstrap 文件需要手动添加依赖。
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency>
在controller写一个读取配置文件的方法
@Value("${pattern.dateformat}") private String dataformat; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat)); }
运行后获得
说明nacos配置文件已经读取到本地
配置热部署
方式一
在@Value的类上添加注解@RefreshScope
@RestController @RequestMapping(value = "user") @RefreshScope public class SysUserController { @Value("${pattern.dataformat}") private String dataformat; ...
这样直接去nacos中修改配置,发布后不用重启服务
方式二
使用注解@ConfigurationProperties
新建一个类,专门完成属性加载
package priv.sinoam.demouser.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; /** * 加载nacos配置类 * @author hasee */ @Data @Component @ConfigurationProperties(prefix = "pattern") public class Pattern { private String dateformat; }
@Component将其注册成spring的一个bean,prefix和变量名要和配置文件中一致,将代码修改为
@RestController @RequestMapping(value = "user") public class SysUserController { @Autowired private SysUserService sysUserService; @Autowired private Pattern pattern; @GetMapping("now") public String now(){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(pattern.getDateformat())); }
这样直接去nacos中修改配置,发布后不用重启服务
多环境配置共享
微服务启动时从nacos读取多个配置文件:
[spring.application.name]-[spring.profiles.active].yaml,即和服务名跟环境有关系
[spring.application.name].yaml,即只和服务名有关系
所以可以将配置文件放在下面这个配置文件中。
所以在nacos新建配置时,使用服务名.yanl即可,在本项目中例如demo-user.yaml
优先级:服务名-active.yaml>服务名.yaml>本地配置
结语
:)