Spring Boot如何在application.properties中为yaml设置spring.config.location

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (1532)

我使用spring boot 1.4.2,现在尝试设置属性。

我有四个关于将.properties.yml用于外部(内部资源)和本地文件系统(外部项目文件夹)的案例。

的.properties外部(资源文件夹内),效果很好既@Value($ {} property.name)@PropertySource最后一个使用价值属性可以从文件系统像下面加载。

@Component
@PropertySource(value="file:C:\\properties\\application-dev.properties")
@PropertySource(value="file:C:\\properties\\application-test.properties")
public class ExternalProperties {
   // ...
}

但是当文件名'application.yml'时,.yml在资源文件夹下效果不佳

.yml可以由@ConfigurationProperties加载,需要'propdeps-plugin'

我的.yml文件

environments:
    dev:
        url: http://dev.bar.com
        name: Developer Setup
    prod:
        url: http://foo.bar.com
        name: My Cool App

这段代码效果很好

@Component
// external(inside resources)
@ConfigurationProperties(prefix="environments")
// outside project folder
@ConfigurationProperties(locations={"file:C:\\properties\\application.yml"}, prefix = "environments")
public class YamlProperties {

    private Map<String, String> dev = new HashMap<>();
    private Map<String, String> prod = new HashMap<>();

    public Map<String, String> getDev() {
        return this.dev;
    }

    public Map<String, String> getProd() {
        return this.prod;
    }
}

该代码存在已弃用的位置属性问题(我阅读了很多文章,但无法弄清楚)所以我需要查找API文档并从本节中找到'ConfigFileApplicationListener'

# SPRING CONFIG - using environment property only (ConfigFileApplicationListener)
spring.config.location= # Config file locations.
spring.config.name=application # Config file name.

所以在application.properties上写上面的属性就像这样。

spring.config.location=file:C:\\properties\\application.yml
spring.config.name=application

并重新加载.yml属性(我没有尝试执行jar。我使用war并通过Controller测试)

@Component
@ConfigurationProperties(prefix="environments")
public class YamlProperties {

     private Map<String, String> dev = new HashMap<>();
     private Map<String, String> prod = new HashMap<>();

     public Map<String, String> getDev() {
         return this.dev;
     }

     public Map<String, String> getProd() {
         return this.prod;
     }
}

此代码未从本地文件系统C:驱动器加载.yml,但在资源文件夹中添加application.yml文件时效果很好。

那么如何设置spring.config.location负载.yml

我想知道为什么location属性可以工作,虽然自1.4版以来已弃用。

并想知道如何使用ConfigFileApplicationListener我无法跟进代码,这很难理解给出一些提示〜!

编辑: 我想念这个,当战争再次开始并使用本地文件系统属性再次创建上下文时。这不是与之相关的,而是为了未来的步骤。 tomcat重启而不是war部署新的,所以我在本地系统上有文件,它包含属性,如果我更改此文件的数据,可以在tomcat重启时使用udated属性上下文。 为什么我继续尝试这项工作,我使用公共github帐户并保护连接数据库信息的其他东西。我得到了这些东西并继续下一期,如git-encrpt,spring-cloude,nginx,docker。谢谢你的任何帮助真的很有帮助。

提问于
用户回答回答于

您可以在调用Spring Boot应用程序时使用spring.config.location属性。下面是一个示例,其中您在自定义位置有4个自定义名称的属性文件。

java -Dspring.config.location=file:/gfs/config/post/post.properties,/gfs/config/post/post_pwd.properties,/myDbConfig/config/db-config.properties,/myserver/config/db-passwd.properties  -jar myapp-1.0-SNAPSHOT.jar

在代码中,您可以通过以下方式访问它们:

@Component
public class AppProperties {

    @Value("${post.user.name}")
    private String username;
}
用户回答回答于

由于您使用的是spring boot 1.4.2,一切都很简单。您只需为应用程序指定其他参数,例如java -jar name-of-application-version.jar --spring.config.location=file:///C:/properties/application.yml。实现这一目标的一种更常见的方法是为JVM定义附加选项java -Dspring.config.location=file:///d:/private-bootstrap.yml -jar name-of-application-version.jar。这两种方法都可以工作,因为它们可以在我的桌面上正常工作。

扫码关注云+社区

领取腾讯云代金券