单体Spring boot引入外部配置文件yml,propert
2021-07-07 本文已影响0人
蓉漂里的小白
我们在做微服务项目时候会引入spring cloud框架,对于配置文件我们就会通过spring cloud config来配置,实现线上环境动态修改配置文件属性而不需要重新打jar 包。 但是对于单体的spring boot工程,我们又希望可以在生产环境中方案修改配置文件属性。
解决方案:
通过引入外部配置文件,应用启动时候设置配置文件的自动加载
1: 在单体工程的root目录下添加一个config目录,然后新建我们的properties, 如:jdbc-db.properties, redis.properties
image.png
2: 然后在我们的application启动类上添加@propertySources注解引入我们的外部文件
@PropertySources({
@PropertySource("file:config/jdbc-db.properties"),
@PropertySource(value = "file:config/redis.yml",factory = YamlPropertySourceFactory.class)
})
注意:因为PropertySources 默认只解析.properties文件,如果要解析yml文件,需要指定factory只需要实现org.springframework.core下的 PropertySourceFactory 接口就OK了。
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
factory.setResources(resource.getResource());
factory.afterPropertiesSet();
Properties ymlProperties = factory.getObject();
String propertyName = name != null ? name : resource.getResource().getFilename();
return new PropertiesPropertySource(propertyName, ymlProperties);
}
}
简单的properties配置文件只需要按如下方式配置即可
@PropertySources({
@PropertySource("file:jdbc-db.properties"),
@PropertySource(value = "file:redis.properties")
})
只需要1,2步骤就可以完成外部文件的加载,如果涉及到线上修改配置就只需要手动修改配置文件,重新启动应用即可生效。