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;
}
}