ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

本地环境时覆盖Apollo配置

2021-04-12 17:01:44  阅读:715  来源: 互联网

标签:String 覆盖 更改 environment 本地 Override Apollo local public


如果在本地环境,需要进行某些配置的更改,但是只是为了本地开发方便,例如服务端口的更改,Eureka注册地址的更改,那么可以使用该组件进行配置覆盖。 分步指南
  1. 实现原理
  2. 代码实现
  3. 适用场景
  一、实现原理     二、代码实现 LocalApplicationContextInitializer:
  public class LocalApplicationContextInitializer implements org.springframework.context.ApplicationContextInitializer<ConfigurableApplicationContext>, EnvironmentPostProcessor, Ordered {   private static final String LOCAL_ACTIVE = "local";   private static final String[] LOCAL_APPLICATIONS = new String[]{"applicationConfig: [classpath:/application.yml]","applicationConfig: [classpath:/application-local.yml]","applicationConfig: [classpath:/application-local.yaml]","applicationConfig: [classpath:/application-local.properties]"};   private int order = Integer.MAX_VALUE;     @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {   }   /** * 将本地local配置优先级设置为最高 * @param context */ @Override public void initialize(ConfigurableApplicationContext context) { ConfigurableEnvironment environment = context.getEnvironment(); String[] activeProfiles = environment.getActiveProfiles(); if(activeProfiles != null){ for (String activeProfile : activeProfiles) { if(LOCAL_ACTIVE.equals(activeProfile)){ MutablePropertySources propertySources = environment.getPropertySources(); for (String localApplication : LOCAL_APPLICATIONS) { PropertySource<?> propertySource = propertySources.get(localApplication); if(propertySource != null){ propertySources.remove(localApplication); propertySources.addFirst(propertySource); } } } } }     }   @Override public int getOrder() { return order; } }
  LocalApplicationRecoverConfiguration:
  @Configuration @Slf4j @ConditionalOnProperty(value = "spring.profiles.active",havingValue = "local") public class LocalApplicationRecoverConfiguration{   @Bean public PropertySourcesProcessor configPropertySourcesProcessor() { log.info("use local configPropertySourcesProcessor"); return new LocalConfigPropertySourcesProcessor(); }   }
  LocalConfigPropertySourcesProcessor:
  @Slf4j public class LocalConfigPropertySourcesProcessor extends PropertySourcesProcessor implements BeanDefinitionRegistryPostProcessor {   @Override public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {   }   @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {   }   @Override public void setEnvironment(Environment environment) {   }   @Override public int getOrder() { return 0; } }
    三、适用场景 本地需要更改某些配置,但是不能直接更改Apollo,例如端口号的更改,注册中心地址的更改,数据库配置信息的更改等。简而言之就是,配置更改只对自己可见,不能影响其它开发人员。

标签:String,覆盖,更改,environment,本地,Override,Apollo,local,public
来源: https://www.cnblogs.com/ymqj520/p/14648885.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有