spring boot使用nacos作为配置中心实践
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot使用nacos作为配置中心实践相关的知识,希望对你有一定的参考价值。
参考技术A 本文主要介绍自己将nacos作为spring boot的配置中心的实践过程,希望对有需求的小伙伴提供一些帮助。
通过nacos实现配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
在linux系统中可以通过以下命令安装 docker-compse:
使用如下命令创建部署文件 nacos-standalone-mysql-8.yaml :
文件内容如下:
使用如下命令启动nacos:
使用下面的命令可以查看启动日志:
启动成功后访问: http://localhost:8848/nacos
登录用户名:nacos
登录密码:nacos
可以去maven中央仓库查找 nacos-config-spring-boot-starter 最新依赖,这里使用的最新依赖。
将spring boot项目中原有的配置放到nacos中,如下图所示:
在 application.yaml 文件中配置 Nacos server 的地址:
使用 @NacosPropertySource 加载nacos中 dataId = "spring-boot-demo.yaml" 的配置文件,并开启自动更新:
通过 Nacos 的 @NacosValue 注解设置属性值。
启动 NacosConfigApplication ,调用 http://localhost:8777/spring-boot-demo/get ,返回内容是 祢豆子。
使用spring boot整合nacos的配置管理还是挺简单的,总体来说就只有三步:
1、引入 nacos-config-spring-boot-starter 依赖
2、在配置文件中设置nacos的地址
3、在启动类上使用注解@NacosPropertySource 指定nacos中配置的 Data ID
1、在 application.yaml 配置文件中指定nacos中配置的 Data ID 不会生效,需要通过注解 @NacosPropertySource 指定才能生效。
2、 nacos-config-spring-boot-starter:0.2.7 依赖最高支持 spring boot 2.3.x ,如果使用 spring boot 2.4.x 将会报如下错误:
spring boot项目中使用nacos作为配置中心
利用nacos作为配置中心,好处不言而喻,配置外置了,与程序解耦,并且nacos还提供了友好的管理界面。spring boot的卖点之一,就是与之前的spring相比,所谓约定重于配置,配置文件大大简化。现在使用nacos这种外置配置中心,是更加向前了一步。
具体应用步骤:
1、pom.xml中引入nacos支持包
2、pom.xml中指向nacos
3、配置文件中使用nacos配置项
如此,即可使用nacos中的配置,修改啥的都很方便,根本不用远程服务器。如果设置refresh选项,连程序都不用重启,即时刷新。下面是详细介绍:
1、pom.xml中引入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>
2、pom.xml中指向nacos
这里其实还没有指向nacos,只是定义了一些属性。因为我们这个项目准确来说,是个spring cloud项目(spring cloud居于spring boot),里面包含多个子系统,因此在最外层的pom.xml定义了公共属性,其中包含nacos。如果只是spring boot,那么可以省去这一步。
<profile>
。。。
<properties>
。。。
<!--Nacos配置中心地址-->
<config.server-addr>192.168.10.248:8848</config.server-addr>
<!--Nacos配置中心命名空间,用于支持多环境.这里必须使用ID,不能使用名称,默认为空-->
<config.namespace>gdhysthj</config.namespace>
<!--nacos用户名-->
<config.username>nacos</config.username>
<!--nacos密码-->
<config.password>nacos</config.password>
。。。
</properties>
</profile>
3、配置文件中使用nacos配置项
由于我这个spring boot项目使用了spring cloud,它有一个bootstrap.yml(bootstrap,绑鞋带?引申为步步为营、引导程序之意),对nacos的应用即在于此。我猜spring boot项目,直接在application.properties中定义也可以的。
spring:
。。。
cloud:
。。。
nacos:
config:
namespace: $config.namespace #这些就是前面定义的公共属性。如果是spring boot,直接写值应该也可以
server-addr: $config.server-addr
username: $config.username
password: $config.password
shared-configs[0]:
data-id: common.properties
refresh: true #自动刷新
shared-configs[1]:
data-id: db_oracle.properties
group: YJZH_GROUP
refresh: true
shared-configs[2]:
data-id: redis.properties
refresh: true
shared-configs[3]:
data-id: rabbitmq.properties
refresh: true
shared-configs[4]:
data-id: minio.properties
refresh: true
discovery:
namespace: $config.namespace
server-addr: $discovery.server-addr
username: $config.username
password: $config.password
。。。
由上图可知,指定的命名空间下,有好几个配置文件,然后它们以数组的形式,在spring cloud的bootstrap.yml文件中被指定:shared-configs[0]、shared-configs[1]、。。。其实将这些分散的配置文件的内容写在一起,合成一个文件也是可以的。不管是一个文件或多个文件,对于系统来说,最终都是一个配置的集合。shared-configs[x]是nacos推荐的写法,原先是ext-config[x],现在已经弃用了。配置文件的书写顺序不重要,一个配置文件,比如db.properties,你放在shared-configs[0]或者shared-configs[1]都没关系。
shared-configs[1]:
data-id: db_oracle.properties
group: YJZH_GROUP #如果同一个命名空间下,配置文件名称相同咋办?用不同分组名称
refresh: true #是否自动刷新。true的hua,更改nacos配置,在应用这里会立即生效
小结
nacos中的配置,和我们平时写在application.propertis/application.yml中的配置并无不同,在系统中是同样使用。
以上是关于spring boot使用nacos作为配置中心实践的主要内容,如果未能解决你的问题,请参考以下文章
PassJava 开源 : Spring Cloud 整合 Nacos 配置中心 #私藏项目实操分享#
Spring Cloud Alibaba Nacos服务注册和配置中心