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

问题描述:

我使用spring boot 1.4.2,现在尝试设置属性。Spring Boot如何在yaml的application.properties中设置spring.config.location

我有四个病例的使用的.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 { 
    // ... 
} 

.yml没有行之有效的资源文件夹下时,文件名“application.yml”

的.yml可以通过@ConfigurationProperties和需要“propdeps-插件”加载

我.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”从这个section问题。

# 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属性(我没有尝试EXCUTE罐子。我用通过控制器战争和测试)

@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; 
    } 
} 

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

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

而且我想知道为什么位置属性适用尚未虽然自1.4版本弃用。

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

编辑:

我想念明白这个,当战争再次启动,使 的上下文中再使用本地文件系统属性。这不是 收集链接它,但仍然为未来的步骤。

将tomcat重启不是战争部署新的,所以我对 本地系统中的文件也包含属性,如果我改变这个文件的数据,当tomcat的重启 可以udated属性的环境。

为什么我继续尝试这个工作,我使用公共github帐户,并保护 连接数据库信息的其他东西。我得到这个东西,然后继续下一个 问题,如git-encrpt,spring-cloude,nginx,docker。谢谢你真的帮助 任何帮助。

+0

你最好试试'bootstrap.yml'配置并指定你想要的配置。比如'spring.config.location'。如果你使用'bootstrap.yml',请记住添加'org.springframework.cloud:spring-cloud-context'的依赖关系。为了简单起见,'spring-cloud-context'会自动加载'bootstrap.yml',并且配置也可以自动加载。另一种方法是通过'-Dspring.config.location ='或'--spring.config.location ='等命令行参数指定。前格式的参数应该出现在'-jar'选项之前。 –

+0

实际上,'yml'扩展名通常被用在Spring框架中,而不是'yaml'。最简单的方法是将你的引导配置文件命名为'bootstrap.yml'在你的'resources'文件夹中。示例[https://github.com/soiff-spring/spring-boot-example.git](https://github.com/soiff-spring/spring-boot-example.git)可以做一些帮助。 –

+0

感谢春天的云信息我会尝试下一步,我更新名称yaml到yml,但仍然不起作用。感谢您的新信息@GeminiKeith –

由于您使用的是spring 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。这两种方法都可以工作,因为它们可以在我的桌面上正常工作。

+0

谢谢你的帮助@GeminiKeith战争情况如何?在真正部署到tomcat上它工作正常吗?其实我使用公共github,我也知道任何其他好的解决方案,但尝试第一个简单的方法。 构建war文件后,它包含具有本地文件系统属性信息的bean。如何将jar文件保存从命令行注入的信息?我刚刚了解过去发展情况的-jar。 –

+0

我有一些小姐了解我的评论,它是刷新属性上下文信息,当tomcat重新启动。所以jar,war没有永久保存上下文信息。我想澄清我提到的感谢。 @GeminiKeith –

+0

它实际上是在tomcat下部署的一场战争。但是,如果您想要保持您的配置并使其在下次启动时可用,则需要完成更多工作。这并不像您想象的那么简单,您最好将您的要求作为另一个要讨论的问题发布。一个很好的解决方案是spring cloud config。通过这种方式,您不需要在参数中指定太多设置,而无需在[spring cloud config](http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html)中指定它们。 –