我正在创建一个Sping Boot 应用程序,我遇到了这个问题。
我在recource文件夹中有我的application.properties
,但我还需要external.propertiesjar之外的www.example.com文件来配置属性,例如:
姓名
密码,
等等的。
我想有external.properties文件外的jar和内部资源文件夹进行测试,同时开发。
我尝试创建如下配置文件:
@Configuration
@PropertySource("classpath:" + SpringConfiguration.EXTERNALIZED_PROPERTIES)
@PropertySource(value = "file:./" +
SpringConfiguration.EXTERNALIZED_PROPERTIES, ignoreResourceNotFound = true)
public class SpringConfiguration {
static final String EXTERNALIZED_PROPERTIES = "external.properties";
}
但它仍然从资源文件夹中读取属性。我怎样才能让它从jar外面读取?
6条答案
按热度按时间nr9pn0ug1#
尝试指定绝对系统路径作为
file:
属性的值。可选地,我建议首先将绝对路径设置为ENV变量,然后在
file:
中使用该变量:这样当目录改变时,你就不需要修改你的代码了。
qoefvg9y2#
Maciej Kowalski的回答。
})
假设在文件夹“/home/me/configs”中有“application.properties”文件。
使用自定义文件夹运行应用程序:
或
此外,您可以将其导出为环境变量(UNIX)
o2rvlv0m3#
解决方案是删除external.properties和配置文件。而不是使用它把所有的属性到application.properties。并把application.properties与jar文件夹。Spring会自动将这个属性文件的优先级设置在jar内部的属性文件之上。
g9icjywg4#
如果您需要不同的开发和生产 prop ,请使用application-dev.properties和application-prod.properties并在启动时设置适当的Spring配置文件。如果您需要覆盖jar中的任何属性,只需将
-Dmyproperty=myvalue
添加到startup命令ct2axkht5#
@cuteBrick,但是这样,你需要复制/编辑整个application.properties。当您只需要修改子集时,请使用Spring配置文件:将
application-dev.properties
和/或application-prod.properties
放置在JAR文件附近,并仅覆盖其中必要的属性(url、secret)。然后,运行指定Spring Profile的应用程序:
-Dspring.profiles.active=dev
(顺便说一句,默认Spring配置文件为default
)dffbzjpn6#
如果您需要添加外部属性,您可以仅在
application.properties
中指定。例如:
myapplication.username='john'
从Sping Boot 代码中,你可以像这样访问它:
或
@Value("$myapplication.username")
我不认为有任何需要有外部文件,如果你的要求是你提到的问题。