首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在春季应用程序启动时从资源目录加载所有.yml文件?

如何在春季应用程序启动时从资源目录加载所有.yml文件?
EN

Stack Overflow用户
提问于 2018-09-18 07:59:55
回答 2查看 2K关注 0票数 0

我在一个spring应用程序的资源目录中有2-3个.yml文件。我希望在应用程序启动时自动加载所有这些文件。

我尝试了下面的代码,但没有工作。

代码语言:javascript
复制
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文件值。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-18 08:38:52

这里有一个问题,"spring.config.location:src/main/resources/"spring.config.location设置为src/main/resources/,它不是类路径资源,而是文件系统资源。这是从运行Spring应用程序的当前目录中查找的。

几个解决办法:

指定如下所示的完整文件系统路径:

代码语言:javascript
复制
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中。

代码语言:javascript
复制
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:,并使用/在资源的根级启动目录。

票数 1
EN

Stack Overflow用户

发布于 2018-09-18 08:52:48

您可以使用@PropertySource注释将配置外部化为属性文件。

Spring建议使用Environment来获取属性值。

代码语言:javascript
复制
env.getProperty("mongodb.db");

您可以提到类中使用的属性文件。

代码语言:javascript
复制
@Configuration
    @PropertySource({
        "classpath:config.properties",
        "classpath:db.properties"
    })
    public class AppConfig {
        @Autowired
        Environment env;
    }

从Spring 4开始,您可以使用ignoreResourceNotFound来忽略未找到的属性文件

代码语言:javascript
复制
  @PropertySources({
        @PropertySource(value = "classpath:missing.properties", ignoreResourceNotFound=true),
        @PropertySource("classpath:config.properties")

示例来自于文章- https://www.mkyong.com/spring/spring-propertysources-example/

如果需要更多信息,请参考本文,来自Spring文档

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52381698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档