在编写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
怎么调用呢
这个是starter的写法,需要你打包,mavn install,然后再你的项目中dependedcy