我正在开发一个独立的Swing / Spring Boot应用程序,该应用程序将部署在许多不同的环境中。出于这个原因,我需要Spring加载外部配置文件,用户将在其中输入数据库凭据。当我用Netbeans运行它时,当我用我的配置类注释时,一切正常:
@PropertySource("classpath:config.properties")
在这种情况下,文本文件从src / main / resources文件夹中获取,应用程序可以使用凭据启动。我的问题涉及最终将部署的打包JAR文件。由于类路径在INSAR中,因此用户希望如何编辑其内容?
@PropertySource是否有办法指向打包的JAR之外,例如使用我完全愿意添加的环境变量作为应用程序的工作要求?
答案 0 :(得分:0)
如前所述,您可以使用yml获取外部属性:
Spring boot external configuration of property file
@PropertySource(" file:$ {application_home} config.properties")//或指定yaml文件
答案 1 :(得分:0)
使用此:
@PropertySource("file:/path/to/file")
$ {...}占位符将针对任何/所有财产来源解决 已经在环境中注册
允许以下内容:
@PropertySource("file:${my_var}path/to/file")
答案 2 :(得分:0)
您可以将配置文件作为类路径的一部分(在jar中),然后在类路径外部使用另一个配置文件,然后覆盖打包配置中的默认值。您可以使用file:URI而不是classpath:
从类路径外部加载外部文件@PropertySource( “文件:/config.properties”)
但是:您不必自己使用@PropertySource注入配置文件:Spring启动会自动从不同位置加载配置文件:
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
}