3-nacos作为配置中心
1. 依赖引入
nacos既有服务注册与发现功能,也有配置功能,在spring boot下分别有两个依赖
1 | <!--主要从nacos中获取配置--> |
nacos可以单独作为配置中心使用,不做服务与发现等其他功能,这时候只需要引入nacos-config-spring-boot-starter
相关的配置就行了
2. nacos配置中心预埋数据
文件如下:
配置如下:
3. 项目配置文件
1 | #nacos server的地址 |
注意: 若没有配置nacos.config.namespace,nacos默认使用public的配置
3.1. spring原生注解支持
在启动类上加入配置@NacosPropertySourc
,指定好groupId和dataId,再搭配上配置文件中的namespase即可唯一确定一个配置。在项目启动时此注解就会将nacos中对应的配置加载到内存中,其效果和配置文件加入到内存中一样。
1 |
|
配置了之后项目中便可以跟以前一样使用@ConfigurationProperties
和@Value
注解了
3.2. nacos 自带注解
nacos的注解部分对应spring原生注解,如 @NacosConfigurationProperties
@NacosValue
3.2.1. @NacosConfigurationProperties
注解
NacosConfigurationProperties
类比为ConfigurationProperties
,其使用原理与ConfigurationProperties
注解相当
nacos的自带注解不需要添加@NacosPropertySource
,可单独使用,当然也可以配合使用。
单独使用的时候,nacos不会先将配置文件添加到内存Enviroment
中,因此在我们获取配置的时候是拿不到数据的,但是nacos给我们提供了一个选项autoRefreshed = true
,此注解的意思是会监听nacos中的变化,同时会在创建监听器的时候再去nacos中拿一次数据。
因此,在未添加@NacosPropertySource
必须设置autoRefreshed = true
,否则将拿不到数据。具体将在下节分析源码得到答案。
配置如下
1 |
|
注意: 在type = ConfigType.PROPERTIES
未指定时dataId须要带上文件类型后缀
3.2.2. @NacosValue
注解
@NacosValue
注解 类比@Value
注解,它也在项目启动的时候也从Enviroment中注入属性值,使用的表达式也相同。
但是@NacosValue
有一个扩展autoRefreshed
,当其为true时,会注册监听器,当配置文件改变时刷新值@NacosValue
必须搭配@NacosPropertySource
注解使用,否则即使加了autoRefreshed = true
初始化的值依然为空
1 |
|
4. 总结
nacos可以专门只做配置中心,因此普通的单体项目也可以用它来存储配置文件
nacos做配置中心时引入
nacos-config-spring-boot-starter
即可,spring项目需要自行挖掘一下nacos的的配置注入与spring类似,同时也支持spring的方式注入(前提是不需要刷新配置文件时通知应用)
nacos与spring注解用途相似,只不过nacos多了一个自动刷新,类比如下:
nacos spring @NacosPropertySource
@PropertySource
@NacosConfigurationProperties
@ConfigurationProperties
@NacosValue
@Value
建议还是在项目启动时添加上
@NacosPropertySource
指定项目用到的配置文件,避免出现获取不到值的情况