加载类路径下的全部/特定前缀的properties文件:
import org.springframework.beans.factory.config.PropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import java.io.IOException;
import java.util.Properties;
public class CustomPropertyConfiguration {
@Bean("datasourceProperties")
public Properties datasourceProperties() throws IOException {
PropertiesFactoryBean factoryBean = new PropertiesFactoryBean();
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
factoryBean.setLocations(resolver.getResources("classpath*:/profiles/*.properties"));
// 或者如下
// factoryBean.setLocations(resolver.getResources("classpath*:/datasource*.properties"));
factoryBean.setIgnoreResourceNotFound(true);
factoryBean.setFileEncoding("UTF-8");
return factoryBean.getObject();
}
}
对于获取的配置文件,如果不封装到Properties对象,也可以添加到Environment中.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePropertySource;
import java.io.IOException;
public class ProfileEnvironment implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
CompositePropertySource propertySource = new CompositePropertySource("profiles");
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
Resource[] resources = resolver.getResources("classpath*:/profiles/*.properties");
for (Resource resource : resources) {
propertySource.addPropertySource(new ResourcePropertySource(resource));
}
environment.getPropertySources().addLast(propertySource);
} catch (IOException e) {
//...
}
}
}