2012-08-08 181 views
26

很多java應用程序都是用maven構建的。 maven擁有Profile概念,爲不同環境構建發佈包真的很方便。例如dev/test/prod使用不同的path/jndiname/security rule/properties files ...我想我不必在此列出代碼來解釋它。maven配置文件或彈簧配置文件?

春天是Java開發一個很好的和流行的框架,因爲spring3它支持的配置文件的概念了。

現在問題來了,釋放不同ENVS目的,哪一個更好?現在我更喜歡maven個人資料。因爲Spring必須複製每個配置文件中的每個bean定義。它需要一個初始化程序/屬性讓spring知道哪個配置文件應該被激活。

但我覺得彈簧配置文件比maven配置文件更靈活。

你覺得呢?請給出一些建議。謝謝。

回答

30

Maven的輪廓將提供一個建立時間的解決方案,而springframework的輪廓將提供一個運行時選擇。我認爲這是人們可能會問自己的第一個問題:如果他想要一個可以部署在不同環境中的軟件包,或者他希望構建工具根據目標環境提供不同的軟件包。

有一點要記住的是,如果你有部署到不同的服務器不同的包很多問題可能會出現。例如,在我的工作場所,如果我正在部署一個包來糾正先前在生產環境中出現的錯誤,那麼公司策略會聲明唯一可接受的方案是我在QA和生產服務器中具有相同的解決方案包。

5

如果你需要不同的工件,然後去與maven。如果它只是一個真正的配置,可以在構建產品之後配置用戶Spring配置文件。

0

我認爲這取決於您的要求。如果你有不同的基於環境的依賴關係(例如,jdbc驅動等),你會想用maven來解決這個問題。

如果它只是一個配置部署的事情,你可能使用過春更好。

6

正如在其他答覆中提到:這一切都取決於你如何工作:)

我們來到了什麼,在過去的幾年中使用maven,現在春天3.1配置文件是這樣的:

  • 我們使用maven-release-plugin來削減版本。這會造成一些問題與環境,如果我們將使用Maven的配置文件,因爲我們需要重建
  • ,所以我們在的.war適用於所有環境的文件創建釋放或至少標籤與每一個行家的個人資料,並使用彈簧PropertyPlaceholderConfigurer設置應用(或者取決於客戶的一些JNDI資源)。這允許只有一個maven版本運行。
  • 當環境不同時,彈簧配置文件也會出現。例如一個在所有環境中都不可用的身份驗證服務。在這裏,我們存儲該服務並將其放入Spring配置文件中。我們在我們使用的PropertyPlaceholderConfigurer讀取的屬性中激活彈簧配置文件。

也有一些不錯的教程圍繞如何做到這一點:

我們通常只使用Maven的配置文件來構建拆分成不同的部分開發人員和持續集成構建。我們實際上並沒有將它們用於.war文件的目標環境。 我們仍然使用maven配置文件進行自動化數據庫部署,與web應用程序(數據量,測試數據等)相比,它們的差異更大,但這些不是以zip形式提供的。

當然還有其他的方法可以去。我不認爲它的故事結束:)

但它可能會有所幫助。

2

我碰巧使用properties-maven-plugin根據哪個maven配置文件被激活來設置系統屬性。然後在Spring中,我以編程方式激活了我想要的配置文件,具體取決於系統屬性:

String activeProfile = System.getProperty(「myapp.profile」);

appContext.getEnvironment()。setActiveProfiles(....)

此外,當我想直接兩種輪廓(行家/彈簧)的鏈接,我被設置spring.profiles.active屬性通過maven插件。

Thoses的做法在設計中可能是錯誤的,但他們解決了我的問題。

+1

正是我在找的,thanx! – Vinicius 2017-03-08 17:31:25