2014-01-30 72 views
0

我有一個問題,與春季檔案。我瞭解不使用maven配置文件的原因,因爲每個環境都需要另一個工件。從那以後。我修改了我的代碼以使用Spring Profile,但我在Spring Profiles中遇到的問題是它需要您爲服務器上的每個環境都創建一個database.property文件。我有這個設置,每個人都看過一百次。春季檔案條件道具文件多環境

src 
- main 
- resources 
    -conf 
    myapp.properties 
    -env 
     dev.db.properties 
     test.db.properties 
     prod.db.properties 

我覺得這種設置的問題在於,每個服務器都在ENV目錄中的所有文件(即開發將有它的服務器上prod.db.properties和test.db.properties文件)。有沒有一種方法可以在不使用配置文件的情況下複製構建maven時所需的文件?我一直無法想出辦法。如果是這樣的話,那麼這似乎是使用maven配置文件的理由。我可能錯過了一些東西。任何想法將不勝感激。

回答

2

這看起來像雞和雞蛋問題給我。如果您希望您的工件在所有這3種環境下工作,則需要運送3種配置。不這樣做會導致您最初提到的相同問題。根據配置文件建立不同座標的工件通常是不好的做法。

如果您不想在工件本身中發送配置,則可以通過使用系統屬性或通過在定義的位置(爲了方便您可以覆蓋)找到屬性文件來定義外部定義。

+0

決定將所有環境中的公共目錄中的屬性外部化。一個神器實現了多個環境。 – Trevor

0

您應該首先指出您的應用程序的真實含義:如果您正在「在不同環境中運行應用程序」,或者如果您在自己的propritary環境中運行「不同的應用程序」。這是兩個略有不同的概念:

  • 如果您正在運行在不同的環境中應用它能夠更好地把所有的財產文件到您的罐子。想象一下,你想買一輛新的SUV,你首先在試車道上駕駛它,然後在越野前在普通高速公路上行駛,最終享受其越野能力。你總是在不同的環境中使用同一輛車,並具備其所有的能力和駕駛特性。在每種環境下,汽車都會調整其行爲和駕駛特性。如果您使用一個應用程序來驅動它通過不同的環境,那麼請使用第一種方法將所有環境特性構建到一個jar中。
  • 另一方面,你也可以在不同的環境中使用稍微不同的汽車。所以如果你需要不同的汽車,在不同的環境下有其特殊的駕駛特性,可能是4WD或特殊的泛光燈,因爲你在夜間駕駛,你應該採取第二種方法。返回到應用程序:如果您需要不同的應用程序,並且在不同的生產環境中具有不同的特性,那麼最好只使用它真正需要的屬性來構建每個應用程序

最後你也可以合併兩種方法:

  • 我的,有趣的應用程序foo.jar中爲客戶FOO與測試,集成和生產環境的性能。
  • my-fun-application-2047.jar客戶2047具有測試,預集成,集成,預生產和生產環境的屬性。

現在您應該瞭解爲什麼您不應該使用配置文件構建具有不同風味的應用程序。