簡體   English   中英

如何為非 spring boot 的 java 應用程序指定外部配置文件

[英]How can I specify an external configuration file for a java application that is not spring boot

背景

我已經使用 kotlin 和 gradle 構建了一個控制台 java 應用程序。 gradle 文件創建了一個胖 jar,我可以使用java -jar <project>.jar從命令行運行它java -jar <project>.jar包含從中讀取屬性的 application.properties 文件。

問題

我想在命令行上指定應該從某個外部路徑讀取 application.properties 文件。
使用spring boot的時候,我用過

java -jar -Dspring.config.location=somepath/application.properties <project>.jar

這有效。
但它似乎在非彈簧啟動應用程序中不起作用

是否可以在命令行上為非 Spring Boot 應用程序指定外部配置?

Spring boot 在文檔中有一整章處理各種配置方式。

顯然,如果你沒有 spring boot,你應該自己實現類似的東西。

您應該決定的第一件事 - 您需要在哪個級別將配置集成到您的應用程序中:

  • 您只想從命令行讀取鍵/值還是可能依賴於環境變量或系統屬性?

  • 一般來說,你的配置來源是什么:Yaml? 屬性文件? 也許領事或etc.d?

  • 你想創建一個反映你讀過的配置的java對象(就像spring boot中用@ConfigurationProperties注釋的類一樣嗎?

  • 您是希望僅支持一種配置源還是希望支持各種配置源?

  • 如果您使用 Spring,您是否希望配置屬性自動注入到 bean 中?

  • 如果您打算使用 properties/yaml(例如 spring boot 中的application.properties )-您想將它們放在哪里? 非 spring 啟動應用程序不會“自動神奇地”讀取它們,您必須實現此邏輯。

  • 您是否打算處理配置文件(非 spring-boot 應用程序仍然支持根據指定的配置文件加載不同 bean 的風格)。

Spring Boot 已經回答了所有這些問題以及更多問題。

如果您在 spring boot 上下文之外運行但仍有 spring 應用程序,則可能需要嘗試以下一些選項:

  1. 我猜從 spring 3.1 開始,就有一個@PropertySource注釋,您可以使用它從類路徑中的文件或文件系統中的某個“位置”中創建 spring 加載屬性。 本文總結了這種方法的用法,並比較了 Spring Boot 與常規 Spring 應用相比,袖子上有什么。 也是一個很好的教程,涵蓋了常規的 spring 功能。

  2. spring 生態系統之外的東西但仍然有用: apache 通用配置項目。 有一些解決方法可以將其與 spring 應用程序集成,請參見此處

考慮到這里的所有答案,我得出的結論是,雖然可以在非 Spring Boot 的應用程序中啟用外部配置,但確實需要一些努力。 因此我決定在容器中使用 Spring Boot。

暫無
暫無

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

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