簡體   English   中英

如何在Spring Boot Jar中修改屬性文件

[英]How to modify a properties file in spring boot jar

我正在編寫一個Spring Boot應用程序。 該應用程序通過MessageQueues與大型機對話

因此,為了與MainFrame進行對話,我們提供了一個Java jar(具有與MessageQueues對話的代碼)。 讓我們稱之為代理jar。

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

因此,問題來了,此Proxy jar的編碼方式是,它在類路徑中查找名為“ commcfg.properties”的文件(期望名稱完全相同)。 實際上,代理jar使用另一個從屬jar(稱為運行時jar),它從commcfg.properties中讀取隊列詳細信息,並從Message Queues中讀取/寫入。

commcfg.properties具有MessageQueue和Host的值以及這些Queue的端口。 簡而言之,隊列詳細信息。

因此麻煩在於這些MessageQueue詳細信息在不同的環境中會有所不同。 我需要根據環境使用commcfg.properties

到目前為止,我為解決此問題進行了嘗試。

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

    我已經創建了如下文件commcfg.DEV.properties commcfg.PROD.properties,以便它們位於類路徑中

    接下來,我編寫了代碼,以根據環境選擇特定的屬性文件,並將其重命名為commcfg.properties(因為Proxy jar及其依賴於助手的Runtime jar需要確切的名稱為commcfg.properties)。

    我可以在本地工作區中執行此操作。 但是在部署時(我們使用docker),它被打包到spring boot jar中。

    所以我的黑客無法正常工作,因為我們無法使用jars重命名文件。

  2. 我有另一個想法:

    在調用功能代碼之前,我會將commcfg.properties放在類路徑(project / src / main / resources)中,然后閱讀並根據每個環境的需要修改值。 這些值將在application.properties中具有。 但是我再次懷疑在jar中無法修改文件。

希望我很清楚,請幫幫我。

在春季啟動中,您可以使用Java注釋@PropertySource注冊屬性文件。

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

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

}

並讓commcfg.properties文件包含DEV環境詳細信息

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

現在構建您的jar文件,您將獲得yourjar.jar

現在在DEV環境中使用默認值運行它

java -jar yourjar.jar 

在QA環境中運行它,並覆蓋配置文件中的默認值

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

這樣,您可以覆蓋默認值。 我希望這有幫助

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM