SpringBoot 集成 Nacos实现统一配置管理
SpringBoot集成Nacos实现统一配置管理
小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
从三个方面深入源码:
服务注册
服务地址的获取
服务地址变化的感知
在Spring-Cloud-Common包中有一个类org.springframework.cloud.client.serviceregistry.ServiceRegistry,它是SpringCloud提供的服务注册的标准,集成到SpringCloud实现服务注册的组件,都会实现该接口。
public interface ServiceRegistry<R extends Registration>{ void registry(R registration); void deregistry(R registration); void close(); void setStatus(R registration,String status); <T> T getStatus(R registration); } 复制代码
而这个接口的实现类是com.alibaba.cloud.nacos.registry.NacosServiceRegistry,它什么时候触发服务注册动作?
Spring Cloud集成Nacos的实现过程
在Spring-cloud-commons包的META-INF/spring.factories中包含自动装配信息如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.cloud.client.CommonsClientAutoConfiguration=\ org.springframework.cloud.client.ReactiveCommonsClientAutoConfiguration=\ 复制代码
SpringBoot集成Nacos实现统一配置管理
创建一个SpringBoot项目,并集成Nacos配置中心
添加Nacos Config maven依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>nacos-config-spring-boot-starter</artifactId> <version>0.2.4</version> </dependency> 复制代码
在application.yml中添加Nacos Server的地址
nacos: config: server-addr: 127.0.0.1:8848 复制代码
创建NacosConfigController类,用于从Nacos Server动态读取配置
@NacosPropertySource(dataId = "server1",autoRefreshed = true) @RestController public class NacosConfigController { @NacosValue(value = "${info:local}",autoRefreshed = true) private String info; @GetMapping("config") public String getConfig(){ return info; } } 复制代码
Nacos注解说明:
@NacosPropertySource,用于加载dataId为server1的配置源,autoRefreshed标识开启自动更新
@NacosValue:设置属性的值,其中info表示key,而Local代表默认值,如果key不存在,则使用默认值,是一种高可用的策略,在实际应用中,需要考虑在配置中心不可用下如何保证服务的可用性。
作者:Gxin
链接:https://juejin.cn/post/7017614332410363935