1. 程式人生 > 其它 >VM options 以及 properties檔案的一些理解

VM options 以及 properties檔案的一些理解

背景

之前做專案配資料來源資訊,一般是把使用者名稱,密碼這些都放在一個properties檔案中。最近做了個專案是把使用者名稱密碼配置在了web容器(tomcat)啟動選項裡,然後通過${key}注入到properties檔案中。

由此產生很多疑問

  1. 容器的啟動選項是怎麼注入到properties檔案中的。
  2. 容器的啟動選項設定的屬性的使用範圍。
  3. properties中配置的屬性是怎麼注入到spring配置檔案中的。
  4. properties中配置的屬性的使用範圍。

個人理解 (有問題請指教)

在網上找了很久,沒有找到說清楚VM options是什麼的相關帖子。我就自己理解一下吧。

寫了一個demo,最後發現在VM options中配置的引數,可以通過${}佔位符在專案的任何位置注入,比如spring的xml配置檔案,properties檔案以及通過@Value注入java檔案中。

可以理解為容器的啟動選項配置的屬性是整個web容器的全域性變數,可以在容器中的所有專案,所有專案中的所有檔案中通過${key}引用到。

關於properties檔案

緊接著我順帶深入理解了一下properties檔案以及properties中定義的屬性在spring中的作用域。

基礎操作

首先properties就是一個定義鍵值對的檔案,我們可以通過Properties類載入然後通過getProperty("key")來獲取value,

參考

通常做法:

但是我們用的最多的是在spring的相關配置中使用properties來收集一些配置屬性方便修改。

在spring的xml配置檔案中使用

    <context:property-placeholder location="classpath:service.properties" ignore-unresolvable="true"/>

來載入properties檔案,然後在xml中用${key}來注入對應value,或者在java類屬性上用@Value(${key})來注入對應value。

於是我又產生了一個疑問:在xml中引入的properties檔案的作用域是什麼,是當前xml檔案?是spring容器?還是整個專案?

寫了一個demo測了一下,發現xml中引入的properties的屬性是容器級別的。比如springmvc系統中會有springmvc子容器和spring核心父容器兩個容器,在springmvc.xml中引入的properties的屬性只能在springmvc子容器中的bean以及同級別xml配置檔案中獲取到,而spring父容器中的bean則獲取不到,反之亦然。

總結:

  1. 容器的啟動選項是怎麼注入到properties檔案中的。解答:我們只需要配置容器啟動選項,其他完全由容器實現和處理。
  2. 容器的啟動選項設定的屬性的使用範圍。解答:容器中所有專案,專案中所有檔案。
  3. properties中配置的屬性是怎麼注入到spring配置檔案中的。解答:我們只需要引入properties檔案,其他由spring實現和處理
  4. properties中配置的屬性的使用範圍。解答:屬性引入的容器