2016-04-18 95 views
9

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

回答

29

之前,你這樣做,考慮外在屬性文件出你的部署包。這樣,您可以在每個環境中部署相同的編譯。它將爲Jenkins節省一些實際上不必要的工作。最好的做法是隻構建一次你的應用程序,但是,如果你不相信,這裏是如何做到這一點。

  1. 在你的pom.xml定義配置文件提供屬性相應的值。

    <profile> 
        <id>dev</id> 
        <properties> 
         <jdbc.url>your_dev_URL</jdbc.url> 
        </properties> 
    </profile> 
    
  2. 設置的Maven Resources Plugin過濾包含您application.properties文件的目錄。

    <build> 
        <resources> 
         <resource> 
          <directory>src/main/resources</directory> 
          <filtering>true</filtering> 
         </resource> 
        </resources> 
        ... 
    </build> 
    
  3. 如果你使用Spring啓動1.3以上,你應該知道的事實是,爲了避免春節引導佔位符和令牌由Maven的資源插件過濾之間的衝突,該框架介紹a solution that requires using a different syntax的篩選值。

    現在,而不是${property.key}你應該使用@[email protected]。在這種情況下,您的application.properties必須包含下面的示例,你期望的工作:

    [email protected][email protected] 
    

您還可以檢查出後約separating Spring properties files for different Maven profiles。這樣你將從你的pom.xml中外部化值。

+0

這不無需使用標記即可工作。 –

+0

Maven配置文件默認情況下未激活。你需要自己激活它。調用構建時,可以用'-P'標誌觸發配置文件。你不是被迫使用'activeByDefault'。 –

1

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

但是,您必須瞭解,儘管Maven配置文件在應用程序包/構建時工作,但Spring Boot在運行時會執行這些配置文件。換句話說,使用Maven配置文件,您將獲得配置文件特定的不可變構建版本,而使用Spring Boot中的版本時,每次啓動它之前都可以更改應用程序配置或even while it's running

參見:

+0

您可以在這裏看到我的答案:http://stackoverflow.com/questions/36635163/spring-boot-externalizing-properties-not-working/36635367#36635367關於如何外部化屬性的示例 –

相關問題