2017-04-20 65 views
0

我正在編寫Spring Boot應用程序。 這個應用程序通過MessageQueues與主框架對話如何修改spring boot jar中的屬性文件

因此,爲了與該MainFrame對話,我們提供了一個java jar(它具有與MessageQueues對話的代碼)。讓我們稱之爲代理jar。

我們必須使用從上面提到的代理jar寫的操作。 我們不寫任何代碼在我們的應用程序中讀/寫MessageQueues(IBM MessageQueues),這是通過代理jar及其相關的運行時jar完成的。

所以問題來了,這個代理jar被編碼的方式是它在類路徑中查找一個名爲'commcfg.properties'的文件(期望名稱完全相同)。實際上,Proxy jar使用另一個依賴jar(允許調用運行時jar),它從commcfg.properties讀取隊列詳細信息,並從Message Queues讀取/寫入。

commcfg.properties具有MessageQueue的值和這些隊列的主機和端口。總之隊列細節。

所以問題在於這些MessageQueue的細節在不同的環境中會有所不同。我需要根據環境使用commcfg.properties

到目前爲止我的試驗來解決這個問題。

  1. 可以說我有兩種環境。 因此,我將有兩個不同的組commcfg.properties值的

    我已經創建的文件如下 commcfg.DEV.properties commcfg.PROD.properties,這樣他們將在classpath中

    接下來,我有書面代碼,它將根據環境挑選特定的 文件並將其重命名爲commcfg.properties(因爲代理jar和其輔助程序相關的運行時jar需要確切名稱爲 commcfg.properties)。

    在我的本地工作空間中,我可以做到這一點。 但是,當部署(我們使用碼頭),被包裝到彈簧引導罐。

    所以我的破解不起作用,因爲我們不能用罐子重命名文件。

  2. 另一種認爲我有:

    之前,我打電話給我的功能的代碼,我會把commcfg.properties在 類路徑(項目/ src目錄/主/資源) 我會讀它,修改值根據需要每個環境。 我將它們放在application.properties中。 但我再次懷疑在jar中我無法修改該文件。

希望我很清楚 請幫助我..

+1

如果我正確理解了你的話:除了一個特定的屬性文件(你不能使用Spring方法來使用Environment/class屬性來配置你的應用程序),你不能使用其他任何東西嗎?在這種情況下,唯一的解決辦法是在你的類路徑中提供你的commcfg.properties文件,但在你的jar之外(例如放置jar的根目錄中的某處)。然後,您將此根目錄添加到您的類路徑中,以便您可以輕鬆修改它。 –

+0

只需添加@MikeWojtyna所說的,在這種情況下的一些常見方法是1.使用具有不同環境屬性的Spring雲配置服務器。 2.將屬性文件放在jenkins中,並讓jenkins在構建期間選擇相應的文件 – pvpkiran

+0

謝謝@mike 和Kiran 您能否請指教如果我可以在Maven構建階段對其進行調整? –

回答

0

春天開機,您可以註冊您的屬性與Java註釋@PropertySource

@SpringBootApplication 
@PropertySource("classpath:commcfg.properties") 
public class ApplicationConfig 
{ 

public static void main(String args[]) 
{ 
    SpringApplication.run(ApplicationConfig.class); 
} 

}

文件,並讓commcfg.properties文件包含開發環境的細節

messageQueue.name=myMessageQueue 
messageQueue.host=host 
messageQueue.port=4040 

現在建立你的jar文件,你會得到yourjar.jar

現在,在開發環境使用默認值,在您的配置文件

java -jar --messageQueue.name=diffrenthost --messageQueue.host=diffrenthost --messsageQueue.port=diffrentport yourjar.jar 

這種方式可以覆蓋默認值覆蓋缺省值運行

java -jar yourjar.jar 

在QA環境中運行它。我希望這可以幫助

+0

謝謝,但這不會解決我的問題。我早些時候試過這個解決方案。 我的spring引導應用程序不使用commcfg.properties文件(包含隊列詳細信息)。這些值由Spring彈簧引導所依賴的非Spring Java代碼(代理jar)使用。 –

0

您可以將屬性文件放在spring-boot jar的相同路徑中,配置項可以覆蓋jar中的屬性。

相關問題