目录
前言
最近在做一个微服务的练手项目,然后每个服务都需要去单独的配置数据库,redis等重复的配置,如果需要去修改时就需要同时的去修改多个文件,麻烦是一回事,但如果漏改配置的话项目可能因此无法启动,所以就去找了nacos共享配置的相关资料,在这里做nacos配置通用配置的一个总结。
一.准备工作
需要导入两个依赖
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
需要将application.yml改为bootstrap.yml。
二.nacos配置中心的操作
1.多环境配置
如果有需要配置多个环境下的配置,需要创建额外的命名空间,然后在bootstrap.yml中的config填写对应的命名空间即可加载对应的配置,可以创建bootstrap-dev.yml,bootstarp-prod.yml,然后在文件里填写对应的命名空间,在bootstarp.yml指定运行环境,即可正确的加载配置。
示例代码如下:bootstarp.yml
spring:
profiles:
active: dev #指定环境
application:
name: userservice #服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos地址
group: LLPY
这里的group如果不填默认值为DEFAULT_GROUP
在配置好上述的操作之后,就需要进行bootstrap-dev.yml的配置了,这里需要指定对应的命名空间,命名空间对应的id在创建时即可看见,或者在配置管理中也可见,如下图
我这里新建了一个配置,配置了redis和mysql的连接信息
bootstrap-dev.yml
这里需要注意data-id的填写,后缀应该是yaml,而不是yml
spring:
cloud:
nacos:
config:
namespace: a4c64d4f-45e6-4b77-9261-0ac7a9b244c1 #命名空间
file-extension: yaml # 配置的后缀名
# 使用extension-configs,多个配置加载多个dataId
extension-configs:
- data-id: common-dev.yaml #新建的配置,名称需要完全对应上
group: LLPY
refresh: true # 动态刷新配置
需要注意的时,namespace需要填写在config下而不是discovery下,一开始我填写在discovery下,导致加载不到配置文件,因此排了很久的错。
2.单环境配置
进入nacos的配置管理中新建一个配置
以下配置了redis和mysql的连接信息
创建完成之后就可以进行bootstarp.yml的编写了
bootstarp.yml
这里需要注意data-id的填写,后缀应该是yaml,而不是yml
spring:
application:
name: userservice #服务名称
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos地址
group: LLPY
config:
file-extension: yaml # 配置的后缀名
# 使用extension-configs,配置加载多个dataId
extension-configs:
- data-id: common-dev.yaml #创建的配置,名称需要完全对上
group: LLPY
refresh: true #动态刷新
三.测试配置是否加载
可以在config包下创建一个NacosConfigPrinter配置类,用来输出你在nacos配置中心中所配置的连接信息,如果打印正确,则说明配置成功被加载
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
@Component
public class NacosConfigPrinter implements ApplicationListener<ApplicationReadyEvent> {
private final Environment environment;
public NacosConfigPrinter(Environment environment) {
this.environment = environment;
}
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
// 打印Nacos配置
System.out.println("Nacos配置:");
System.out.println(environment.getProperty("spring.redis.host"));
}
}
总结
在使用微服务开发项目时,可以使用nacos配置中心进行公共配置的编写,有效地管理和动态更新各种配置信息。同时降低了系统配置管理的复杂度和成本。