Spring Boot Starter 中使用 EnvironmentPostProcessor 添加默认参数

在编写spring boot starter 时,因为是企业内部的封装服务,所以引用的三方包需要的一些配置,就希望在stater中得以集成.
主要实现使用端无须任何配置,达到开箱即用。
开始受到以前使用spring 的方式影响,第一反应就是PropertySourcesPlaceholderConfigurer。

@Bean
public static  PropertySourcesPlaceholderConfigurer properties() {
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    ClassPathResource classPathResource=new ClassPathResource("queue-common.yml");
    yaml.setResources(classPathResource);
    Properties properties=yaml.getObject();
    configurer.setProperties(properties);
    return configurer;
}

但是此路不通.
后面在参考了:
Spring Boot启动流程详解
http://zhaox.github.io/java/2016/03/22/spring-boot-start-flow

之后,于是使用 EnvironmentPostProcessor 解决了此问题。

首先建一个bean

@Component
public class QueueCommonEnvironmentPostProcessor  implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        ClassPathResource classPathResource=new ClassPathResource("queue-common.yml");
        yaml.setResources(classPathResource);
        Properties properties=yaml.getObject();
        PropertiesPropertySource propertySource =new PropertiesPropertySource("QueueCommonProperties", properties);
        environment.getPropertySources().addLast(propertySource);
    }
}

然后再spring.factories 中添加;

org.springframework.boot.env.EnvironmentPostProcessor=\
com.xxx.message.queue.starter.QueueCommonEnvironmentPostProcessor

发表评论

电子邮件地址不会被公开。 必填项已用*标注