Java jar外部的Spring引导外部属性

Java jar外部的Spring引导外部属性,java,spring,spring-boot,jar,properties,Java,Spring,Spring Boot,Jar,Properties,我正在创建一个Spring启动应用程序,我遇到了这个问题。 我的application.properties位于resource文件夹中,但我还需要jar外部的external.properties文件来配置如下属性: 名称 暗语 等 我希望在jar外部和resources文件夹内部有external.properties文件,以便在开发时进行测试。 我尝试创建如下配置文件: @Configuration @PropertySource("classpath:" + SpringConfigu

我正在创建一个Spring启动应用程序,我遇到了这个问题。 我的application.properties位于resource文件夹中,但我还需要jar外部的external.properties文件来配置如下属性: 名称 暗语 等 我希望在jar外部和resources文件夹内部有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外部读取?

如果需要添加外部属性,可以仅在application.properties中指定

例如: myapplication.username='john'

通过Spring引导代码,您可以访问它,如下所示:

 @Autowired  
 private Environment env;

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

@值$myapplication.username


我认为,如果您的要求如您所述,则不需要外部文件。

如果您需要添加外部属性,则可以仅在application.properties中指定

例如: myapplication.username='john'

通过Spring引导代码,您可以访问它,如下所示:

 @Autowired  
 private Environment env;

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

@值$myapplication.username


我认为,如果您的需求与您所提到的一样,那么就不需要外部文件。

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

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

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

或者,我建议先将该绝对路径设置为ENV变量,然后在文件中使用该变量::


这样,当目录更改时,您就不需要更改代码。

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

或者,我建议先将该绝对路径设置为ENV变量,然后在文件中使用该变量::


这样,当目录更改时,您就不需要更改代码。

类似于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"

此外,还可以将其导出为环境变量unix

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

马切伊·科瓦尔斯基的类似回答

@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"

此外,还可以将其导出为环境变量unix

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

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

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

我希望外部文件在不创建新jar文件的情况下更改某些属性。这就是您要找的?我希望外部文件在不创建新jar文件的情况下更改一些属性。这就是您要查找的内容?将此@PropertySourceclasspath:+SpringConfiguration.EXTERNALIZED_属性更改为@PropertySourcefile:+{location}/propertiesfilename它将为您提供访问外部的权限,您还必须准确地提供{location}通过JVM参数或spring参数将此@PropertySourceclasspath:+SpringConfiguration.EXTERNALIZED_属性更改为@PropertySourcefile:+{location}/propertiesfilename它将为您提供外部访问权限,您还必须通过JVM参数或spring参数准确地提供{location}