统一配置管理:
我们服务中配置如果都放在代码中或者项目里的配置文件中,那么我们如果要修改配置,就不得不修改代码,提交上线,重启服务。
如果我们使用统一配置管理,就可以在服务启动的时候从配置管理服务读取配置,启动后,修改配置后,也会主动通知我们的服务。
点击新建配置
DataId是唯一的,所以,命名需要注意,这里使用服务名+环境标识。
group默认,配置格式选择yaml,内容填写需要热更新的配置。
添加配置内容
点击页面最后的发布
点击页面最后的发布
服务启动的时候,获取读取nacos配置文件,然后读取本地配置文件,然后将配置合并,然后创建Spring容器,加载bean。
我们要在读取本地配置文件前,获取nacos服务地址,bootstrap.yml文件读取的优先级高与application.yml文件,所以,nacos相关的配置需要放在bootstrap.yml文件中。
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
dependency>
添加后,在application.yml文件中去除重复的配置。
spring:
application:
name: userservice
profiles:
active: dev
cloud:
nacos:
server-addr: 192.168.0.105:8848
config:
file-extension: yaml #文件后缀名
比如我们定义的是:
uservice:
open: 1
通过@Value进行使用
@Value("${userservice.open}")
private String open;
@GetMapping("open")
public String open(){
return open;
}
启动访问open接口,可以拿到配置值1。但这个时候还不支持热更新。
1、在Nacos中添加配置文件
2、在微服务中引入nacos的config依赖
3、在微服务中添加bootstrap.yml,配置nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去nacos读取哪个文件
Nacos中的配置文件变更后,微服务无需重启就可以感知。不过需要通过下面两种配置实现:
在@Value注入的变量所在类上添加注解@RefreshScope
修改配置后,会有以下日志:
04-04 15:49:28:229 INFO 63084 --- [ternal.notifier] o.s.c.e.event.RefreshEventListener : Refresh keys changed: [userservice.open]
04-04 15:49:28:229 INFO 63084 --- [ternal.notifier] c.a.nacos.client.config.impl.CacheData : [config_rpc_client] [notify-ok] dataId=userservice-dev.yaml, group=DEFAULT_GROUP, md5=01bc6b07f4e6ae29eaed0b9d54ed635e, listener=com.alibaba.cloud.nacos.refresh.NacosContextRefresher$1@2ef74e78 ,cost=227 millis.
使用@ConfigurationProperties注解,前缀和变量名拼接后的名字,从配置中匹配。
@Data
@ConfigurationProperties(prefix = "userservice")
@Component
public class PatternProperties {
private String open;
}
如果我们多个环境,开发、测试、生产,所有环境都需要某些相同的配置,我们就需要一个多环境配置共享。
微服务启动时会从nacos读取多个配置文件:
无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享配置可以写入这个文件
userservice.yaml所有环境都能访问到,xx-dev只有对应环境才能访问到。
服务名-profile.yaml > 服务名.yaml > 本地配置
微服务会从nacos读取的配置文件:
[服务名]-[spring.profile.active].yaml,环境配置
[服务名].yaml,默认配置,多环境共享
优先级:
[服务名]-[环境].yaml >[服务名].yaml > 本地配置
使用shared-configs或者extends-configs,来访问其他的配置
spring:
application:
name: userservice
profiles:
active: dev
cloud:
nacos:
server-addr: 192.168.0.105:8848
config:
file-extension: yaml #文件后缀名
shared-configs: common.yaml #可以访问的配置文件
#extends-configs: common.yaml
服务名-profile.yaml >服务名称.yaml > extension-config > shared-config > 本地配置