Nacos作为配置中心
在SpringCloud中的使用
# 我的环境
本文的项目Demo继续沿用之前文章中的聚合工程Nacos
,若小伙伴还没有之前的环境,可至源码地址中下载
进入bin文件夹(目录:nacos-server-1.0.1\nacos\bin),直接双击执行startup.cmd文件,这里具体的启动细节就不再说明
在Nacos-Server中新建配置,其中Data ID它的定义规则是:${prefix}-${spring.profile.active}.${file-extension}
spring.application.name
的值,也可以通过配置项 spring.cloud.nacos.config.prefix
来配置。profile
,可以通过配置项 spring.profile.active
来配置。spring.cloud.nacos.config.file-extension
来配置。目前只支持 properties
和 yaml
类型。注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 prefix.prefix.{file-extension}
这里我创建Data Id 为nacos-config.yml
的配置文件,其中Group为默认的DEFAULT_GROUP
,配置文件的格式也相应的选择yaml
,其内添加配置nacos.config=hello_nacos
,如图所示
1、在聚合工程Nacos下新建Module,创建一个名为nacos-config的子工程,其pom.xml文件内容如下
4.0.0
Nacos
com.study.www
0.0.1-SNAPSHOT
com.larscheng.www
nacos-config
0.0.1-SNAPSHOT
nacos-config
Demo project for Spring Boot
1.8
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
org.springframework.boot
spring-boot-maven-plugin
2、创建配置文件名为bootstrap.yml
,注意是 =bootstrap.xxx= ,而不是application
或者其他。原因如下
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
这里的配置文件类型可以根据个人习惯选择,我这里用的时yml类型,配置内容如下
|
spring:
application:
name: nacos-config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yml
可以看到必须可少的配置项
spring.application.name
spring.cloud.nacos.discovery.server-addr
指定注册中心的地址,如果你不需要注册该服务,也可以去掉该项,并删除discovery依赖
spring.cloud.nacos.config.server-addr
指定配置中心的地址
file-extension
指定配置中心中配置文件的格式
上面的配置是为了保证服务的正常注册和配置获取,以及配置DataID
的正确性
3、创建对外接口来从nacos中读取配置,NacosConfigApplication.java修改如下
@SpringBootApplication
@EnableDiscoveryClient
@RestController
@RefreshScope
public class NacosConfigApplication {
public static void main(String[] args) {
SpringApplication.run(NacosConfigApplication.class, args);
}
@Value("${nacos.config}")
private String config;
@RequestMapping("/getValue")
public String getValue() {
return config;
}
}
其中通过
@Value
注解,去读取key为nacosconfig
的配置的值,并通过/getValue接口返回。
加入@RefreshScope
注解,可以使当前类下的配置支持动态更新。
到此代码部分的工作已经完成
启动成功后在Nacos控制台中可以看到我们注册的服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bPPOQKvL-1679557820630)(null)]
此时调用接口进行测试 http://127.0.0.1:8080/getValue ,可以看到返回结果
hello_nacos
此时说明已经成功读取到配置,下面我将Nacos-Server上的配置修改为hello_lars
,看看能否动态更新
调用接口进行测试 http://127.0.0.1:8080/getValue ,返回结果如下
hello_lars
可以看到我通过Nacos-server的控制台进行配置的修改,客户端服务nacos-config
也相应的进行热更新。
通过上面的测试,可见Nacos做配置中心,在SpringCloud项目中,也可以做到无缝衔接,切换到Nacos可以说知识修改配置的问题,成本也很低
项目的其他配置不变,只需要指定配置中心地址,同时将配置文件外部管理。
** 本文源码 :https://github.com/larscheng/larscheng-learning-demo/tree/master/Nacos**