背景
之前做項目配數據源信息,一般是把用戶名,密碼這些都放在一個properties文件中。最近做了個項目是把用戶名密碼配置在了web容器(tomcat)啟動選項里,然后通過${key}注入到properties文件中。
由此產生很多疑問
- 容器的啟動選項是怎么注入到properties文件中的。
- 容器的啟動選項設置的屬性的使用范圍。
- properties中配置的屬性是怎么注入到spring配置文件中的。
- 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則獲取不到,反之亦然。
總結:
- 容器的啟動選項是怎么注入到properties文件中的。解答:我們只需要配置容器啟動選項,其他完全由容器實現和處理。
- 容器的啟動選項設置的屬性的使用范圍。解答:容器中所有項目,項目中所有文件。
- properties中配置的屬性是怎么注入到spring配置文件中的。解答:我們只需要引入properties文件,其他由spring實現和處理
- properties中配置的屬性的使用范圍。解答:屬性引入的容器