首页 > 其他 > 详细

本地环境时覆盖Apollo配置

时间:2021-04-12 18:11:03      阅读:44      评论:0      收藏:0      [点我收藏+]
如果在本地环境,需要进行某些配置的更改,但是只是为了本地开发方便,例如服务端口的更改,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,例如端口号的更改,注册中心地址的更改,数据库配置信息的更改等。简而言之就是,配置更改只对自己可见,不能影响其它开发人员。

本地环境时覆盖Apollo配置

原文:https://www.cnblogs.com/ymqj520/p/14648885.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!