我正在尝试将外部属性文件加载到我的spring启动应用程序中。 最初我在配置类中使用了@PropertySource。 但现在我想删除这个注释,所以类不依赖于位置。 所以我试着用:
java -jar my-boot-ws.war --SPRING_CONFIG_NAME=file:///Users/TMP/resources/
基于此http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html文档,但我收到以下错误:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder
使用注释工作正常,但我真的想摆脱它。 任何有关这方面的帮助都会很棒
由于
****** CORRECTION *******
抱歉复制粘贴错误,上面的命令应该是:
java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/
我不是要更改配置文件的名称,只需添加其他位置即可。 如下所述:
如果spring.config.location包含目录(而不是文件) 它们应该以/结尾(并且将附加生成的名称 从spring.config.name开始加载之前。)
我将此解释为说文件$ {spring.application.name} .properties将从命令行传入的--spring.config.location加载
答案 0 :(得分:22)
经过多次googeling后,我发现这个Spring Boot and multiple external configuration files表明以下是正确的用法:
java -jar my-boot-ws.war --spring.config.location=file:///Users/TMP/resources/myFile.properties
我的印象是--spring.config.location会在指定的目录中加载其他属性文件。根据我提到的链接上的帖子,情况并非如此。如果指定了目录,则基于链接,然后搜索application.properties。但同样,这里的文档http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html似乎暗示春季启动应用程序将首先查看类路径,如果可用,请获取应用程序名称以获取基于该名称的其他属性文件。
然而,一旦我指定了文件名,一切正常,所以我想我错了。
答案 1 :(得分:11)
在命令行中,您应该使用下面的属性来提及其他引导配置文件:
--spring.config.location="file:/path/to/application.properties"
另一种选择是:
-Dspring.config.location="file:/path/to/application.properties"
请注意,字符为小写,单词分隔符为句点。。
否则,您可以使用已使用的密钥的环境变量:
在* nix系统中:
export SPRING_CONFIG_NAME=file:/path/to/application.properties
在Windows操作系统中:
set SPRING_CONFIG_NAME=file:/path/to/application.properties
答案 2 :(得分:4)
这可能不是一个常见的问题,但我遇到了它。即使用application.properties
替换它,你的类路径中也必须有一个--spring.config.name
(由于敏感信息我在gitignore中有我的。)
答案 3 :(得分:0)
1)Makesure args在run方法内部传递
public class GemFireTestLoaderApplication {
public static void main(String[] args) {
SpringApplication.run(GemFireTestLoaderApplication.class, args);
}
}
2)如果您已在xml评论中配置或删除第一个
<!-- <context:property-placeholder location="classpath:config.properties" /> -->
<!-- <context:property-placeholder location="file:/data/xxx/vaquarkhan/dataLoader/config.properties" /> -->
以下命令可用于传递属性名称
3.1)
java -jar GemfireTest-0.0.1-SNAPSHOT.jar --spring.config.location=file:///C:/data/xxx/vaquarkhan/dataLoader/test/config.properties
3.2)
java -jar GemfireTest-0.0.1-SNAPSHOT.jar --spring.config.location=file:///C:/data/xxx/vaquarkhan/dataLoader/test/config.properties
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
答案 4 :(得分:0)
spring.config.name=spring
spring.config.location=classpath:/config/
在配置文件夹 spring.properties 文件中可用,而在运行服务器时,此属性文件未加载