Spring Boot和外部配置

时间:2014-08-17 02:58:09

标签: spring deployment spring-boot

我正在尝试制作一个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

如果我使用此目录结构并使用

执行jar
java -cp ./conf -jar ../libs/app.jar

然后不会加载或识别conf目录中的属性。有没有更好的方法来维护上面的目录结构?或者,什么是替代/最佳实践?

2 个答案:

答案 0 :(得分:7)

Boot external config正是您要找的。

特别提到:

  

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参考指南的以下部分中有说明:

  

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-application-property-files