【问题标题】:Spring Boot and external configurationsSpring Boot 和外部配置
【发布时间】:2014-10-10 08:12:58
【问题描述】:

我正在尝试制作一个 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 目录中的属性不会被加载或识别。有没有更好的方法来维护上面的目录结构?或者,什么是替代/最佳实践?

【问题讨论】:

    标签: spring deployment spring-boot


    【解决方案1】:

    Boot external config 就是你要找的东西。

    特别提到:

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

    • 当前目录的 /config 子目录。
    • 当前目录
    • 类路径 /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 不需要资源是类路径资源。

    【讨论】:

    • 当您在 Java 命令中使用“-jar”时,没有“-cp”。另一种方法是使用专门的类加载器(Spring Boot 有这样的功能 - 在用户指南中查找 PropertiesLauncher)。
    • 谢谢,我错过了他启动它的方式!在我的回复中添加了评论。
    【解决方案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

    【讨论】:

    • 感谢@btiernay。我在参考文献中也看到了这一点。 i18n 属性文件是否相同?我不记得见过类似的东西。
    • @dondragon2 不是,但你可能对justinrodenbostel.com/2014/05/13/…感兴趣
    猜你喜欢
    • 2017-11-26
    • 2019-08-17
    • 2014-11-09
    • 2014-12-25
    • 2018-12-13
    • 2021-01-05
    • 2014-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多