簡體   English   中英

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

[英]Using Maven properties in application.properties in Spring Boot

我正在嘗試將 pom.xml 中的屬性加載到 application.properties 中。 我想創建兩個配置文件:dev 和 prod 以使用不同的數據庫 url。 我使用 Jenkins 作為 CI,在我的所有應用程序中(主要是 Spring MVC,沒有 Boot 項目)都使用 maven 配置文件部署到 Tomcat。 有沒有可能使用 maven 屬性來做到這一點? 我試過這樣的事情: spring.datasource.url=${jdbc.url}

在執行此操作之前,請考慮將屬性文件從可部署包中外部化。 通過這種方式,您可以在每個環境中部署相同的編譯。 它將為您的 Jenkins 節省一些實際上不必要的工作。 最佳實踐是只構建一次應用程序,但是,如果您不相信,這里是如何做到的。

  1. 在您的pom.xml 中定義具有適當屬性值的配置文件。

     <profile> <id>dev</id> <properties> <jdbc.url>your_dev_URL</jdbc.url> </properties> </profile>
  2. 設置Maven 資源插件以過濾包含application.properties文件的目錄。

     <build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> ... </build>
  3. 如果您使用 Spring Boot 1.3 或更高版本,您應該意識到為了避免 Spring Boot 占位符和由 Maven 資源插件過濾的令牌之間的沖突,該框架引入了一個解決方案,該解決方案需要對過濾值使用不同的語法

    現在,您應該使用@property.key@代替${property.key} 在這種情況下,您的application.properties必須包含以下示例才能按預期工作:

     spring.datasource.url=@jdbc.url@

您還可以查看有關為不同的 Maven 配置文件分離 Spring 屬性文件的帖子。 這樣你就可以將你的 pom.xml 中的值具體化。

除了 Daniel Olszewski 之外,在我的 yml 文件中我得到了一個錯誤:(不要使用 @ 進行縮進)

所以我通過添加單引號來修復它。 有人可能會發現它有幫助。

spring:
 datasource:
  url: '@jdbc.url@'

當然有。 只需在application.properties文件上使用Maven 過濾,Maven 就會在文件中寫入您的配置文件特定值。

但是,您必須了解,雖然 Maven 配置文件在應用程序打包/構建時工作,但 Spring Boot 配置文件在運行時工作。 換句話說,使用 Maven 配置文件,您將獲得配置文件特定的不可變構建,而使用 Spring Boot 中的配置文件時,您將能夠在每次啟動之前甚至在運行時更改應用程序配置。

另見:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM