2015-08-25 39 views
0

我們正在使用Spring Boot和相關的依賴關係從頭開發一個新的Web應用程序,並使用Gradle構建。Gradle構建具有不同屬性文件的多個.war文件

我們的項目具有測試幾乎5個階段,使用不同的服務器上的每個階段執行,從而與每個服務器上的略微不同的組態結束。

上述場景是一種非常常見的情況,通常是我在之前的項目中遵循的一種做法,將「屬性」文件直接保存在服務器的類路徑下,以便可以在多個服務器上部署相同的.war文件,仍然有基於服務器/環境的不同配置。

現在,以上設置中的明顯缺點是, - 這樣的設置不能被容易地通過一些版本控制器其他開發者共享。此外,我不能在構建過程中使用Gradle中的「處理資源」任務來介紹一些動態屬性。

現在,如果我拉項目設置中的屬性文件,然後我可以很容易的版本控制它,分享變得更容易,我還可以通過引入搖籃動態屬性。缺點是我可能必須在更新.properties文件後準備多個.war文件。

我有兩個問題?

  1. 您對上述2種方式有什麼想法?鑑於這種情況,你會選擇什麼以及爲什麼(處理這種情況的其他方式)?
  2. 在構建多個.war文件的第二種情況下,如何重新運行戰爭任務以生成新的輸出文件?

謝謝!

回答

1

您應該爲所有環境構建一場戰爭。爲每個環境設置一個os envvar(例如spring.profile = dev,spring.profile = prod)。

閱讀(春天會爲你做這個)基於該ENVVAR正確的屬性文件。防爆application-dev.properties,application-prod.properties

商店生產數據庫連接密碼在envvars中,而你在它。

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

+0

我正是這樣做的..因爲99%的屬性是相同的,我必須將我所有的屬性都推送到appliation.properties中。然後,因爲我只能從application.properties中控制活動配置文件,所以我也在同一個文件中包含可變部分(spring.profile)。因此,我結束了上述2個場景.. – rakpan

+0

@FirstX你是什麼意思「控制活動配置文件」?你不要在你的屬性文件中設置活動配置文件,你可以在OS env var中設置它。此外,您可以擁有多個屬性文件 –

0

當然有可能推出的所有屬性文件到戰爭和建立在一些「輪廓」的邏輯,而你因爲你使用Spring實際上可能有這樣的。 Spring does support "profiles"基於系統級屬性的值。

我過去使用的另一種方法是在構建時「構建」屬性文件。我用Gradle做了這個。實質上,您有一個帶有佔位符的運行時屬性文件「模板」,用於每個特定於環境的屬性以及一個屬性文件,這些屬性文件有條件地插入到您的Gradle項目中,並由Gradle複製任務中的'expand'方法使用。您可以使用命令行屬性(如-Penv=PROD)來定位您的環境。

你的戰爭任務可能依賴於其他任務,buildRuntimeProperties什麼的。這構建了特定於環境的屬性。在這一點上,你必須決定如何處理您的構建神器:

  1. 構建屬性文件到戰爭和每一個具體的ENV戰發佈到你的神器回購與識別的版本或工件ID
  2. 管理屬性文件,並保持戰爭環境不可知,並使用您的屬性解析代碼來查找戰爭以外的屬性。
+0

您可以提供任何代碼段或鏈接嗎?我想遵循第二種方法,但不知道如何去做。 – Nayan

相關問題