我在spring应用程序的resources目录中有2-3个.yml文件。 我想在应用程序启动时自动加载所有这些文件。
我尝试了下面的代码,但是没有用。
ConfigurableApplicationContext applicationContext = new SpringApplicationBuilder(YamlLoadApplication.class)
.properties("spring.config.name:applicationTest,CountriesData",
"spring.config.location:src/main/resources/")
.build().run(args);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
MutablePropertySources sources = environment.getPropertySources();
请帮助我解决此问题。实现这一目标的最佳方法是什么?我会在整个应用程序中使用所有这些yml文件值。
谢谢
答案 0 :(得分:3)
您可以使用@PropertySource
批注将您的配置外部化为属性文件。
Spring建议使用环境获取属性值。
env.getProperty("mongodb.db");
您可以提及该类中正在使用的属性文件。
@Configuration
@PropertySource({
"classpath:config.properties",
"classpath:db.properties"
})
public class AppConfig {
@Autowired
Environment env;
}
从Spring 4开始,您可以忽略ResourceNotFound以忽略未找到的属性文件
@PropertySources({
@PropertySource(value = "classpath:missing.properties", ignoreResourceNotFound=true),
@PropertySource("classpath:config.properties")
示例摘自文章-https://www.mkyong.com/spring/spring-propertysources-example/
如果需要更多信息,请参阅该文章 From Spring documentation
答案 1 :(得分:1)
这里的一个问题"spring.config.location:src/main/resources/"
将spring.config.location
设置为src/main/resources/
,这不是类路径资源,而是文件系统资源。这是从您正在从中运行Spring Boot应用程序的当前目录中查找的。 p>
多个修复程序:
指定完整的文件系统路径,如下所示:
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext;
applicationContext = new SpringApplicationBuilder(YmlsApplication.class)
.properties("spring.config.name:applicationTest,CountriesData",
"spring.config.location:/Users/msimons/tmp/configs/")
.build().run(args);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
MutablePropertySources sources = environment.getPropertySources();
sources.forEach(p -> System.out.println(p.getName()));
}
或指定类路径资源。注意,我将配置文件放在单独的目录下,该目录位于src/main/resources/custom-config
:
public static void main(String[] args) {
ConfigurableApplicationContext applicationContext;
applicationContext = new SpringApplicationBuilder(YmlsApplication.class)
.properties("spring.config.name:applicationTest,CountriesData",
"spring.config.location:classpath:/custom-config/")
.build().run(args);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
MutablePropertySources sources = environment.getPropertySources();
sources.forEach(p -> System.out.println(p.getName()));
}
在路径内注意classpath:
,并以/
在资源的根级别开始目录。