spring boot启动会自动生成一个PropertyPlaceholderConfigurer,该自定义的PropertyPlaceholderConfigurer回覆盖springboot自动生成的PropertyPlaceholderConfigurer
@Configuration
public class ApplicationConfigurer {
private static Logger logger = Logger.getLogger(ApplicationConfigurer.class);
public static final String SPRING_CONFIG_LOCATION = "spring.config.location";
/**
* 自定义配置加载,方法定义为static的,保证优先加载
* @return
*/
@Bean
public static PropertyPlaceholderConfigurer properties() {
final PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setIgnoreResourceNotFound(true);
final List<Resource> resourceLst = new ArrayList<Resource>();
if(System.getProperty(SPRING_CONFIG_LOCATION) != null){
String configFilePath = System.getProperty(SPRING_CONFIG_LOCATION);
String[] configFiles = configFilePath.split(",|;");
FileSystemResource res =null;
for (String configFile : configFiles) {
if (configFile.startsWith("file:")){
resourceLst.add(new FileSystemResource(configFile));
}else {
resourceLst.add( new ClassPathResource(configFile));
}
}
}else {
resourceLst.add(new ClassPathResource("config/application.properties"));
resourceLst.add(new ClassPathResource("config/kafka.properties"));
}
ppc.setLocations(resourceLst.toArray(new Resource[]{}));
return ppc;
}
}