我正在尝试制作一个Spring Boot应用程序。一旦我使用其中包含的所有内容部署到胖jar文件,一切都很好。但是,我真正想要的是配置文件位于外部。例如,我有以下目录结构:
bin - contains startup and shutdown scripts
conf - all configurations. i.e. application.properties, logback.xml i18n.properties
logs - log files
libs - app.jar
如果我使用此目录结构并使用
执行jarjava -cp ./conf -jar ../libs/app.jar
然后不会加载或识别conf目录中的属性。有没有更好的方法来维护上面的目录结构?或者,什么是替代/最佳实践?
答案 0 :(得分:7)
Boot external config正是您要找的。 p>
特别提到:
SpringApplication将从
application.properties
加载属性 将文件放在以下位置并将它们添加到Spring中 环境:
- 当前目录的A / config子目录。
- 当前目录
- classpath / config包
- classpath root
所以我想说在classpath上添加config文件夹是很好的一步。他们应该找到application.properties
并自动加载它。
对于我使用的不同配置文件:
@Configuration
@EnableAutoConfiguration
@PropertySource({
"classpath:path/some.properties",
"classpath:another/path/xmlProperties.xml"
})
public class MyConfiguration {
// ...
}
修改强> 正如Dave指出的那样(感谢Dave!),有 -cp 或 -jar ,所以你不能像那样将它添加到类路径中。但也有选择。这可以帮助您解决问题:Call "java -jar MyFile.jar" with additional classpath option。
如果我没有弄错的话,@PropertySource
不要求资源成为类路径资源。
答案 1 :(得分:2)
还应该提到的是,spring.config.location
参数允许为外部化配置文件指定文件系统/类路径位置。这在Spring Boot参考指南的以下部分中有说明: