Nacos 默认配置,零配置

需求:

        将nacos配置也默认掉,0配置,因为基本上公司只会有固定的配置中心或者按环境有几套固定的,无需每个应用额外关心Nacos的配置,所以需要将Nacos的配置也默认掉,0配置

背景:        

        在使用Nacos时,需要在bootstrap中配置nacos的配置,这个bootstrap会在容器最先起动后将配置加载到环境变量中,是优先于application.yml,这样目的是在将配置全部放配置中心,集中化配置,但Nacos的启动配置还是需要配置的,配置如下

spring:
  application:
    name: user-test
  cloud:
    nacos:
      config:
        serverAddr: 127.0.0.1:8848
        enabled: true # default true
#        username: s
#        password: s
    #        group:  #defaults to DEFAULT_GROUP
        file-extension: yml  #${application.name}-${spring.profiles.active}.${file-extension}
      discovery:
        server-addr: 127.0.0.1:8848

解决方案:

        思路:Nacos在启动时会加载环境变中spring.cloud.nacos前缀的配置,那么我们可以在应用启动时用代码将nacos的相关配置注入

具体做法:

1. 实现自定义的 EnvironmentPostProcessor,在启动时将环境变量注入

public class WafNacosEnvironmentPostProcessor implements EnvironmentPostProcessor, Ordered {

    private static final String CONFIG_PREFIX = "spring.cloud.nacos.config.";

    private static final String DISCOVERY_PREFIX = "spring.cloud.nacos.discovery.";

    private static final String KEY_CONFIG_SERVERADDR = CONFIG_PREFIX + "serverAddr";

    private static final String KEY_CONFIG_USERNAME = CONFIG_PREFIX + "username";

    private static final String KEY_CONFIG_PASSWORD = CONFIG_PREFIX + "password";

    private static final String KEY_CONFIG_GROUP = CONFIG_PREFIX + "group";

    private static final String KEY_CONFIG_FILEEXTENSION = CONFIG_PREFIX + "file-extension";

    private static final String KEY_DISCOVERY_SERVERADDR = DISCOVERY_PREFIX + "serverAddr";

    private static final String KEY_DISCOVERY_USERNAME = DISCOVERY_PREFIX + "username";

    private static final String KEY_DISCOVERY_PASSWORD = DISCOVERY_PREFIX + "password";

    private static final String KEY_DISCOVERY_NAMESPACE= DISCOVERY_PREFIX + "namespace";

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        Map<String, Object> map = new HashMap<>();
        Properties envProperties = WafNacosConfig.getNacosConfig(getActiveEnv(environment));
        //nacos config
        addProperties(environment, map, KEY_CONFIG_SERVERADDR,envProperties.getProperty(SERVER_ADDR));
        addProperties(environment, map, KEY_CONFIG_USERNAME,envProperties.getProperty(USERNAME));
        addProperties(environment, map, KEY_CONFIG_PASSWORD,envProperties.getProperty(PASSWORD));
        addProperties(environment, map, KEY_CONFIG_GROUP,getApplicationName(environment));
        addProperties(environment, map, KEY_CONFIG_FILEEXTENSION,"yml");

        //nacos discovery
        addProperties(environment, map, KEY_DISCOVERY_SERVERADDR,envProperties.getProperty(SERVER_ADDR));
        addProperties(environment, map, KEY_DISCOVERY_USERNAME,envProperties.getProperty(USERNAME));
        addProperties(environment, map, KEY_DISCOVERY_PASSWORD,envProperties.getProperty(PASSWORD));
        addProperties(environment, map, KEY_DISCOVERY_NAMESPACE,getApplicationName(environment));

        if(!map.isEmpty()) {
            environment.getPropertySources().addLast(new MapPropertySource("NacosBootstrap", map));
        }
    }

    private void addProperties(ConfigurableEnvironment environment, Map<String, Object> map, String key, String value){
        if(!environment.containsProperty(key)){
            map.put(key, value);
        }
    }


    @Override
    public int getOrder() {
        return Ordered.LOWEST_PRECEDENCE;
    }
}

2. 在spring.factories中增加启动

org.springframework.boot.env.EnvironmentPostProcessor=\
cn.xxx.nacos.WafNacosEnvironmentPostProcessor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值