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;
}
}
|
原文:https://www.cnblogs.com/ymqj520/p/14648885.html