spring Sping Boot jar外部属性

vc9ivgsu  于 2023-06-04  发布在  Spring
关注(0)|答案(6)|浏览(430)

我正在创建一个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外面读取?

nr9pn0ug

nr9pn0ug1#

尝试指定绝对系统路径作为file:属性的值。
可选地,我建议首先将绝对路径设置为ENV变量,然后在file:中使用该变量:

@PropertySource("file:${EXTERNAL_RESOURCE_DIR}/application.properties")

这样当目录改变时,你就不需要修改你的代码了。

qoefvg9y

qoefvg9y2#

Maciej Kowalski的回答。

@PropertySources({
@PropertySource(value = {"classpath:application.properties"}, ignoreResourceNotFound = true),
@PropertySource(value = {"file:${external.config.location}/application.properties"}, ignoreResourceNotFound = true)

})
假设在文件夹“/home/me/configs”中有“application.properties”文件。
使用自定义文件夹运行应用程序:

java -jar app.jar --external.config.location="/home/me/configs"

java -jar app.jar --external.config.location="C:\\users\\your_user\\configs"

此外,您可以将其导出为环境变量(UNIX)

export JAVA_OPTS='-Dexternal_config_location=/home/me/configs'
o2rvlv0m

o2rvlv0m3#

解决方案是删除external.properties和配置文件。而不是使用它把所有的属性到application.properties。并把application.properties与jar文件夹。Spring会自动将这个属性文件的优先级设置在jar内部的属性文件之上。

g9icjywg

g9icjywg4#

如果您需要不同的开发和生产 prop ,请使用application-dev.properties和application-prod.properties并在启动时设置适当的Spring配置文件。如果您需要覆盖jar中的任何属性,只需将-Dmyproperty=myvalue添加到startup命令

ct2axkht

ct2axkht5#

@cuteBrick,但是这样,你需要复制/编辑整个application.properties。当您只需要修改子集时,请使用Spring配置文件:将application-dev.properties和/或application-prod.properties放置在JAR文件附近,并仅覆盖其中必要的属性(url、secret)。
然后,运行指定Spring Profile的应用程序:-Dspring.profiles.active=dev(顺便说一句,默认Spring配置文件为default

dffbzjpn

dffbzjpn6#

如果您需要添加外部属性,您可以仅在application.properties中指定。
例如:myapplication.username='john'
从Sping Boot 代码中,你可以像这样访问它:

@Autowired  
 private Environment env;

//To access it
 String username = env.getProperty("myapplication.username");


@Value("$myapplication.username")
我不认为有任何需要有外部文件,如果你的要求是你提到的问题。

相关问题