SpringBoot项目如何从Nacos配置中心动态读取配置信息
SpringBoot项目如何从Nacos配置中心动态读取配置信息
1、项目中引入依赖
要从nacos中读取配置,需要引入相关依赖。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2、检查配置文件
首先要保证项目中的bootstrap.yml配置文件存在,且里面的配置正确。
注意:这里我使用的为.yml格式配置文件。且指定 spring.profiles.active=dev
如果你也使用的.yml格式,一定要在bootstrap.yml中指明 file-extension: yml
#bootstrap.yml
spring:
application:
name: application-test
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
#没有使用命名空间的话,可以不用配置,默认为public
namespace: 5bfce986-3911-4699-a972-9e664841821b
3、确认nacos中配置文件名规则
${prefix}-${spring.profile.active}.${file-extension}
-
prefix 默认为
spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。 -
spring.profile.active
即为当前环境对应的profile
,详情可以参考 Spring Boot文档。 注意:当spring.profile.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
-
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yml
类型。
4、读取配置
下面我们通过简单的几个步骤来读取我们配置的yaml
配置内容。
第一步:创建一个配置读取的Controller
创建一个名为ConfigController
的配置查询控制器,并且类上配置@RequestMapping("/config")
。
第二步:通过@Value注解读取配置信息
我们在之前章节通过applicationContext#getEnvironment#getProperty
方法可以直接获取对应的Nacos Config
的配置信息,当然SpringCloud Alibaba
也同样支持通过@Value
注解来获取配置信息,如下所示:
@RestController @RequestMapping(value = "/config") @RefreshScope public class ConfigController { /** * 读取hengboy.name配置信息 */ @Value(value = "${hengboy.name:}") private String userName; /** * 读取hengboy.age配置信息 */ @Value(value = "${hengboy.age:}") private String userAge; /** * 获取配置内容 * * @return */ @RequestMapping(value = "/get") public String getConfig() { return userName + ":" + userAge; } }
解释:${hengboy.name:}表示需要从全局的配置内容中读取hengboy.name的配置信息,如果没有找到则使用 冒号(:) 后的内容,当然这里我们没有添加任何的默认值,如果没有配置则为空字符串。
第三步:通过@RefreshScope注解实时刷新配置信息
我们在ConfigController
控制器上添加了注解@RefreshScope
主要目的是来实时同步通过Nacos Console
修改的配置内容。
@RefreshScope
注解是SpringCloud
内部提供,在需要配置热更新的配置bean上加springCloud的动态加载配置。
@RefreshScope可用在类上也可用在方法上,当用在方法上时,如果是想加载配置bean中使用前缀注入的属性时(@ConfigurationProperties(prefix = “web.test”)),任然会不能实时的动态更新,配置bean中使用@Value注入的属性可实现动态更新。
第四步:运行测试
启动应用程序,我们通过curl http://localhost:8080/config/get
可以获取我们在Nacos Console
添加的配置内容:admin:25
第五步:实时更新测试
通过Nacos Console
我们修改下两个参数的内容并且重新发布配置信息
:
hengboy.name : admin -> admin-change-after
hegnboy.age : 25 -> 30
再次通过curl http://localhost:8080/config/get
命令访问,我们已经可以得到更新后的配置内容:admin-change-after:30