标签:String 覆盖 更改 environment 本地 Override Apollo local public
如果在本地环境,需要进行某些配置的更改,但是只是为了本地开发方便,例如服务端口的更改,Eureka注册地址的更改,那么可以使用该组件进行配置覆盖。 分步指南- 实现原理
- 代码实现
- 适用场景
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; } } |
@Configuration @Slf4j @ConditionalOnProperty(value = "spring.profiles.active",havingValue = "local") public class LocalApplicationRecoverConfiguration{ @Bean public PropertySourcesProcessor configPropertySourcesProcessor() { log.info("use local configPropertySourcesProcessor"); return new 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; } } |
标签:String,覆盖,更改,environment,本地,Override,Apollo,local,public 来源: https://www.cnblogs.com/ymqj520/p/14648885.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。