spring cloud alibaba整合 nacos config源码简析

本文简要分析了Spring Cloud Alibaba如何将Nacos Server配置动态更新到Environment中。通过PropertySourceBootstrapConfiguration初始化配置,利用NacosPropertySourceLocator从Nacos获取并追加配置到PropertySource。配置变更时,Nacos监听器触发事件,ContextRefresher更新Environment,实现配置动态刷新。
摘要由CSDN通过智能技术生成

1. 前言

本文基于Spring Cloud Version:Spring Cloud Hoxton.SR8,Spring Boot Version:2.3.2.RELEASE,Nacos Version:1.3.3

在sprig boot 中,引入nacos-config-spring-boot-starter后,通常是使用@NacosValue注解来获取nacos server 中的配置以及自动刷新,官网中的实例如下:

@Controller
@RequestMapping("config")
public class ConfigController {
   

    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @RequestMapping(value = "/get", method = GET)
    @ResponseBody
    public boolean get() {
   
        return useLocalCache;
    }
}

在spring cloud alibaba中,引入spring-cloud-starter-alibaba-nacos-config则使用了更优雅的方式支持spring 原生注解@Value来获取参数,通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新,官网中的实例如下:

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
   

    @Value("${useLocalCache:false}")
    private boolean useLocalCache;

    @RequestMapping("/get")
    public boolean get() {
   
        return useLocalCache;
    }
}

spring-cloud-starter-alibaba-nacos-config 是把nacos server所有的配置都放在Environment中,下面简要分析一下源码看看是怎么整合

2. spring cloud alibaba 初始化将参数配置追加到Environment

spring cloud alibaba是借助PropertySourceBootstrapConfiguration这个ApplicationContextInitializer,通过自定义类实现PropertySourceLocator接口来扩展,其原理详见《spring cloud 中Environment自定义扩展配置源码简析和实例》
NacosConfigBootstrapConfiguration中创建了NacosConfigManagerNacosPropertySourceLocator两个关键类:

@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty(name = "spring.cloud.nacos.config.enabled", matchIfMissing = true)
public class NacosConfigBootstrapConfiguration {
   

	@Bean
	@ConditionalOnMissingBean
	public NacosConfigProperties nacosConfigProperties() {
   
		return new NacosConfigProperties();
	}

	@Bean
	@ConditionalOnMissingBean
	public NacosConfigManager nacosConfigManager(
			NacosConfigProperties nacosConfigProperties) {
   
		return new NacosConfigManager(nacosConfigProperties);
	}

	@Bean
	public NacosPropertySourceLocator nacosPropertySourceLocator(
			NacosConfigManager nacosConfigManager) {
   
		return new NacosPropertySourceLocator(nacosConfigManager);
	}

}

jar中springfactory.properties的配置:

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.alibaba.cloud.nacos.NacosConfigBootstrapConfiguration

NacosPropertySourceLocator的主要源码如下:

public class NacosPropertySourceLocator implements PropertySourceLocator {
   
@Override
	public PropertySource<?> locate(<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值