SpringBoot 加载自定义yml配置
SpringBoot 加载自定义yml配置
·
公众号:WarmSmile
问题由来
SpringBoot 默认只加载当前启动应用下的yml配置,无法加载在Jar内的自定义yml配置类,所以我们需要手动加载自定义yml配置信息
解决方案
主要通过@PropertySource注解加载自定义yml配置文件,通过实现PropertySourceFactory接口进行yml配置的支持
核心代码
@PropertySource 可以搭配@ConfigurationProperties和@Value一起使用的
@PropertySource(value = {"classpath:config.yml"}, factory = YamlPropertySourceFactory.class)
@ConfigurationProperties(value="xx.interface")
public class TestConfig {
@Value("${ds.address}")
public String address;
}
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String s, EncodedResource encodedResource) throws IOException {
Properties propertiesFromYaml = loadYamlIntoProperties(encodedResource);
String sourceName = s != null ? s : encodedResource.getResource().getFilename();
return new PropertiesPropertySource(sourceName, propertiesFromYaml);
}
private Properties loadYamlIntoProperties(EncodedResource resource) throws FileNotFoundException {
try {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
return factory.getObject();
} catch (IllegalStateException e) {
// for ignoreResourceNotFound
Throwable cause = e.getCause();
if (cause instanceof FileNotFoundException) {
throw (FileNotFoundException) e.getCause();
}
throw e;
}
}
}
总结
通过上面的方式就可以解决,自定义Starter的自定义yml无法加载的问题了
如果有其他更好的方式可以评论告诉我!
往期推荐
A bird in the hand is worth two in the bush.
奢求未来不如把握当下。
关注公众号:WarmSmile
一起成长一起进步
更多推荐
已为社区贡献1条内容
所有评论(0)