Spring引导外部的外部属性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring引导外部的外部属性相关的知识,希望对你有一定的参考价值。

我正在创建一个Spring Boot应用程序,我遇到了这个问题。 我在recource文件夹中有我的application.properties但我还需要在jar之外的external.properties文件来配置如下的属性: 名称, 密码, 等等 我希望在jar和internal资源文件夹之外有external.properties文件,以便在开发时进行测试。 我尝试像这样创建配置文件:

@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外面读取它?

答案

尝试将绝对系统路径指定为file:属性的值。

可选地,我建议首先将该绝对路径设置为ENV变量,然后在file:中使用该变量:

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

因此,当该目录发生更改时,您无需更改代码。

另一答案

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

另一答案

如果需要添加外部属性,则只能在application.properties中指定。

例如:myapplication.username='john'

从Spring启动代码中,您可以访问它:

 @Autowired  
 private Environment env;

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

要么

@Value("$myapplication.username")

如果你的要求与你提到的有关,我认为没有必要有外部文件。

另一答案

类似的答案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”文件。

使用自定义文件夹运行app:

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'
另一答案

解决方案是删除external.properties和配置文件。而不是使用它将所有属性放入application.properties。并将application.properties放到带有jar的文件夹中。 Spring自动将此属性文件优先于jar内的属性文件。

以上是关于Spring引导外部的外部属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud自定义引导属性源

Spring Cloud自定义引导属性源

Spring Cloud自定义引导属性源

Spring Cloud自定义引导属性源

Spring Cloud - 自定义引导属性源

Spring-Bean配置-使用外部属性文件(转)