Spring Boot:如何使用@PropertySource指向jar外的文本文件?

时间:2018-02-19 21:11:21

标签: java spring spring-boot properties external

我正在开发一个独立的Swing / Spring Boot应用程序,该应用程序将部署在许多不同的环境中。出于这个原因,我需要Spring加载外部配置文件,用户将在其中输入数据库凭据。当我用Netbeans运行它时,当我用我的配置类注释时,一切正常:

@PropertySource("classpath:config.properties")

在这种情况下,文本文件从src / main / resources文件夹中获取,应用程序可以使用凭据启动。我的问题涉及最终将部署的打包JAR文件。由于类路径在INSAR中,因此用户希望如何编辑其内容?

@PropertySource是否有办法指向打包的JAR之外,例如使用我完全愿意添加的环境变量作为应用程序的工作要求?

5 个答案:

答案 0 :(得分:0)

如前所述,您可以使用yml获取外部属性:

Spring boot external configuration of property file

@PropertySource(" file:$ {application_home} config.properties")//或指定yaml文件

答案 1 :(得分:0)

使用此:

@PropertySource("file:/path/to/file")

来自javadocs for PropertySource

  

$ {...}占位符将针对任何/所有财产来源解决   已经在环境中注册

允许以下内容:

@PropertySource("file:${my_var}path/to/file")

答案 2 :(得分:0)

您可以将配置文件作为类路径的一部分(在jar中),然后在类路径外部使用另一个配置文件,然后覆盖打包配置中的默认值。您可以使用file:URI而不是classpath:

从类路径外部加载外部文件
  

@PropertySource( “文件:/config.properties”)

但是:您不必自己使用@PropertySource注入配置文件:Spring启动会自动从不同位置加载配置文件:

这里有记录: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files

  

SpringApplication将从以下位置的application.properties文件加载属性,并将它们添加到Spring   环境:

     
      
  • 当前目录的A / config子目录。

  •   
  • 当前目录

  •   
  • classpath / config包

  •   
  • 类路径根

  •   
     

列表按顺序排列   优先级(在列表中较高位置定义的属性   覆盖在较低位置定义的那些。)

答案 3 :(得分:0)

运行spring boot jar时,请将以下参数传递给属性文件的位置。

java -jar myproject.jar --spring.config.location=classpath:/myconfig.properties 

答案 4 :(得分:0)

这将像魔术一样工作,它在Windows和Linux上都能很好地工作。 这是用于开发的示例配置类,如果spring active profile是dev

,则只读取dev属性文件
@Configuration
@Profile("dev")
@PropertySource("file:///${user.home}/path/application-dev.properties")
public class DevelopmentConfig {
    // Your logic goes here
}