Spring 从 application.properties 中引导外部化属性

Spring Boot Externalize properties from within application.properties

我想将我的 属性 源位置设置为指向 application.propoerties 本身的外部目录。 我知道按如下方式传递命令行参数就可以了。

java -jar myApp.jar --spring.config.location=/Users/tony/Desktop/override.properties

但我想从应用程序本身内部设置此路径,而不是传递命令行参数。我尝试将 spring.config.location=/Users/tony/Desktop/override.properties 添加到我的 application.properties 但它不起作用。

我该怎么做?

您可以尝试将以下注释添加到调用 SpringApplication.run() 的主 class 中:

@PropertySource("/Users/tony/Desktop/override.properties")

在 运行 启动 Spring 启动应用程序时,它应该从那里获取属性。使用 build - resources - resource - excludes - exclude in pom.xml 将 application.propertiessrc/main/resources 中排除帮助确保打包的 jar 不包含 applcation.properties 并且会强制 Spring Boot 从 @PropertySource

中指定的路径中获取它
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/application.properties</exclude>
            </excludes>
        </resource>
    </resources>
</build>

但请记住,通过这种方式,您将创建属性文件与应用程序的紧密耦合。如果您将它保留为 运行 时间参数,它将具有足够的灵活性以 运行 其他地方并且维护也会更容易。

spring.config.locationspring.config.additional-location 仅在设置为环境变量、系统 属性 或命令行参数时有用。

要在 application.properties 文件中指定要直接加载的其他配置文件,最好的方法是像这样设置 spring.config.import 属性:

spring.config.import=file:/Users/tony/Desktop/override.properties

参考文献:https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-files