我使用spring boot 1.4.2,现在尝试设置属性。
我有四个案例涉及将 .properties 和 .yml 用于外部(内部资源)和本地文件系统(项目文件夹外部)。
.properties 外部(内部资源文件夹)适用于 @Value($ {property.name})和 @PropertySource 一个use value属性可以从文件系统加载,如下所示。
@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-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文档并找到&#39; ConfigFileApplicationListener&# 39; 来自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属性(我没有尝试执行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重启时,可能是过时的属性上下文。
为什么我继续尝试这项工作,我使用公共github帐户并保护 将db info连接到其他地方。我得到这些东西然后继续下去 像git-encrpt,spring-cloude,nginx,docker这样的问题。真的感谢你的帮助 有帮助的。
答案 0 :(得分:1)
由于您使用的是spring boot 1.4.2,一切都很简单。您只需为应用程序指定其他参数,例如java -jar name-of-application-version.jar --spring.config.location=file:///C:/properties/application.yml
。实现此目的的更常见方法是为java -Dspring.config.location=file:///d:/private-bootstrap.yml -jar name-of-application-version.jar
等JVM定义附加选项。这两种方法都可以工作,因为它们可以在我的桌面上正常工作。
答案 1 :(得分:0)
您可以在调用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;
}
答案 2 :(得分:-2)
这是我们在运行maven spring-boot:时可以使用的命令,如Eclipse一样从IDE运行以提供spring系统属性或命令行参数:
spring-boot:run -Dspring-boot.run.arguments="--server.port=9091,--spring.config.additional-location=file:external_path/application.properties"