在 Spring Boot 的 application.properties 中使用 Maven 属性

新手上路,请多包涵

我正在尝试将 pom.xml 中的属性加载到 application.properties 中。我想创建两个配置文件:dev 和 prod 以使用不同的数据库 url。我使用 Jenkins 作为 CI,在我的所有应用程序(主要是 Spring MVC,没有 Boot 项目)中都使用 maven 配置文件部署到 Tomcat。使用 maven 属性可以做到这一点吗?我试过这样的东西: spring.datasource.url=${jdbc.url}

原文由 Jakub Pomykała 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 803
2 个回答

在执行此操作之前,请考虑将属性文件从可部署包中外部化。这样,您可以在每个环境中部署相同的编译。它将为您的 Jenkins 节省一些实际上不必要的工作。最佳实践是只构建您的应用程序一次,但是,如果您不相信,这里是如何做到的。

  1. 在您的 pom.xml 中,使用适当的属性值定义配置文件。
    <profile>
       <id>dev</id>
      <properties>
          <jdbc.url>your_dev_URL</jdbc.url>
      </properties>
   </profile>

  1. 设置 Maven 资源插件 以过滤包含 application.properties 文件的目录。
    <build>
       <resources>
           <resource>
               <directory>src/main/resources</directory>
               <filtering>true</filtering>
           </resource>
       </resources>
       ...
   </build>

  1. 如果您使用 Spring Boot 1.3 或更高版本,您应该知道为了避免 Spring Boot 占位符和 Maven 资源插件过滤的令牌之间的冲突,该框架引入 了一个解决方案,该解决方案需要对过滤值使用不同的语法

现在,改为 ${property.key} 你应该使用 @property.key@ 。在这种情况下,您的 application.properties 必须包含以下示例才能按预期工作:

    spring.datasource.url=@jdbc.url@

您还可以查看有关 为不同的 Maven 配置文件分离 Spring 属性文件 的帖子。这样您就可以将 pom.xml 中的值外部化。

原文由 Daniel Olszewski 发布,翻译遵循 CC BY-SA 3.0 许可协议

当然有。只需对您的 application.properties 文件使用 Maven 过滤,Maven 就会在文件中写入您的配置文件特定值。

但是,您必须了解,虽然 Maven 配置文件在应用程序打包/构建时工作,但 Spring Boot 配置文件在运行时工作。换句话说,使用 Maven 配置文件,您将获得特定于配置文件的不可变构建,而使用 Spring Boot 中的配置文件时,您将能够在每次启动之前 甚至在它运行 时更改应用程序配置。

也可以看看:

原文由 Aritz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题