簡體   English   中英

如何修改java屬性文件中的值

[英]How do you modify values in java properties file

我有一個config.properties文件,其中包含可配置的屬性,例如在tomcat上部署的webapp中的數據庫連接詳細信息。 例如

local.driver: com.mysql.jdbc.Driver
local.username:myuser
local.password:mypass

dev.driver: com.mysql.jdbc.Driver
dev.username:mydevuser
dev.password:mydevpass

我可以使用spring Environment對象或@Value從config.properties中檢索值。 我的問題是當你在dev上運行時,如何讓Spring的環境對象在本地和dev屬性上運行時選擇本地屬性? 另外,保存敏感數據聽起來也不對,例如屬性文件中的生產數據庫連接細節將在代碼庫中浮動。 那么在生產環境中如何添加生產細節呢? 理想情況下,我希望在我喜歡的時候更改它們,而不必重新部署應用程序。 我正朝着正確的方向前進嗎?

注 - 我在SO上看到的所有答案都討論了在java代碼中更改這些屬性。 我不想這樣做,我希望能夠獨立於應用程序代碼配置這些值。

謝謝

您可以查看spring配置文件以加載特定環境的特定文件。

或者,您還可以使用JNDI屬性或容器中設置的環境屬性參數化從應用程序上下文中加載屬性的文件。

例:

<context:property-placeholder ignore-unresolvable="true" location="${env.config.file:classpath*:META-INF/spring/profiles/dev/dev.properties}" />

啟動它時,可以使用-Denv.config.file =在容器級別(比如Tomcat)設置env.config.file。 通過這樣做,Spring自動在系統中找到屬性並替換它。 如果未明確設置它(例如,在dev中可能使用其他容器,例如jetty),它將使用給定的默認值(在此示例中為dev.properties)。

通過將屬性文件放在war / ear之外,可以隨意更改它們,並且只需要重新啟動上下文。 或者,您可以查看可重新加載的屬性占位符。 如果您不希望明確存儲在戰爭中的密碼,這也會有所幫助。

要加密屬性文件中的信息,如果您使用的是Spring 3,還可以查看: http//www.jasypt.org/spring3.html

為了獲取env特定值,您有幾個選項

  • 如果您可以基於env創建多個屬性文件,那么您可以使用Spring配置文件功能(即spring.profiles.active),這將允許控制通過JVM參數加載的屬性文件。
  • 如果您仍想將所有內容保存在單個文件中,則可以覆蓋PropertyPlaceholderConfigurer以從JVM參數獲取env詳細信息或默認為某個值

在安全問題上,一種方法是將加密密碼存儲在prop文件中。

暫無
暫無

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

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