2014-02-11 70 views
2

我有一個應用程序需要我在啓動過程中設置系統屬性,並且每個環境中的屬性必須不同(即Dev中的一個值,Prod中的值不同)。如何使用AppAssembler設置環境特定的系統屬性?

這與another unanswered question類似,但那個人特別要求守護進程,我們使用的是Program腳本。解決方案可能是相同的,但我發現提示JSW守護進程可能有特殊待遇。 unix模板有一個佔位符@[email protected],而the documentation表示environmentSetupFileName僅用於JSW。我會考慮使用environmentSetupFileName,但我找不到更多關於如何使用它的信息,或者如何獲取environmentSetupFileName期望它們的bin目錄中的其他腳本。

這看起來像是一個普遍的問題,我很驚訝答案並不容易找到。我如何使用AppAssembler設置環境特定的系統屬性?

+0

如果有人有興趣,我們解決這個問題的方法是從AppAssembler配置中刪除一切隨環境而變化的一切。相反,我們在運行時使用系統屬性來確定我們所處的環境,並根據該值加載屬性文件。 – datguy

回答

0

首先,我必須說你的假設,即環境設置文件僅適用於JSW,這是不正確的。該醫生說:在$ BASEDIR/bin中

安裝文件在執行之前被調用。

注意:只適用於jsw平臺。如果此可選環境文件還設置了 WRAPPER_CONF_OVERRIDES變量,則它將被傳遞到JSW本機 啓動程序的命令行參數中,以覆蓋wrapper.conf的 屬性。有關詳細信息,請參閱 http://wrapper.tanukisoftware.com/doc/english/props-command-line.html

JSW的概念只與Note有關,這意味着您可以定義特殊變量來覆蓋包裝器配置文件。我認爲這應該改進(created a ticket for that)。

環境設置文件的定義只是說生成的腳本會調用給定的安裝文件。如果您想將其他文件添加到bin文件中,則不需要輪到您。

此外,如果你理解你的要求正確,你需要創建不同的包Dev,Prod等價值不同的地方。這意味着您需要爲Dev創建一個包併爲Prod創建一個包。 這意味着多次執行appassembler-maven-plugin等,並可能是maven-assembly-plugin來創建適當的結果存檔。

+0

針對每個環境的單獨軟件包是一種解決方案,但聽起來像是矯枉過正。我需要的是每個環境的獨立屬性(例如系統屬性和屬性文件)。隨着我們在環境中的進展,只需更改配置,就可以部署相同的二進制文件。 – datguy

+0

關於將文件添加到bin目錄的問題 - 我該怎麼做?在AppAssembler插件創建後,我還沒有找到正確的mojo集來將文件複製到bin目錄中。 – datguy

+0

只需使用maven-assembly-plugin來打包bin文件夾並通過assembly-descriptor添加補充文件。我不會將它們複製到bin文件夾中,只是使用描述符將它們打包到生成的存檔中。 – khmarbaise

1

你可以把環境變量裏extraJvmArguments,像

<extraJvmArguments>-Dapp.contextPath=${APP_CONTEXT_PATH}</extraJvmArguments> 

因爲APP_CONTEXT_PATH不能在包裝內得到解決, 它仍將以這種形式被appassembler生成的腳本。

然後只需在部署期間設置此env變量。 如果您使用docker,這非常方便。

相關問題