1. 程式人生 > >Spring配置檔案標籤,每個配置檔案中只能實用一次

Spring配置檔案標籤,每個配置檔案中只能實用一次

<context:property-placeholder>標籤提供了一種優雅的外在化引數配置的方式,不過該標籤在Spring配置檔案中只能存在一份!!!

眾所周知,Spring容器是採用反射掃描的發現機制,通過標籤的名稱空間例項化例項,當Spring探測到容器中有一個org.springframework.beans.factory.config.PropertyPlaceholderCVonfigurer的Bean就會停止對剩餘PropertyPlaceholderConfigurer的掃描,即只能存在一個例項!

<context:property-placeholder
location="" file-encoding="" ignore-resource-not-found="" ignore-unresolvable="" properties-ref="" local-override="" system-properties-mode="" order="" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

location:表示屬性檔案位置,多個之間通過如逗號/分號等分隔; 
file-encoding:

檔案編碼; 
ignore-resource-not-found:如果屬性檔案找不到,是否忽略,預設false,即不忽略,找不到將丟擲異常 
ignore-unresolvable:是否忽略解析不到的屬性,如果不忽略,找不到將丟擲異常 
properties-ref:本地java.util.Properties配置 
local-override:是否本地覆蓋模式,即如果true,那麼properties-ref的屬性將覆蓋location載入的屬性 
system-properties-mode:系統屬性模式,ENVIRONMENT(預設),NEVER,OVERRIDE 
ENVIRONMENT:將使用Spring 3.1提供的PropertySourcesPlaceholderConfigurer,其他情況使用Spring 3.1之前的PropertyPlaceholderConfigurer 
OVERRIDE:
 PropertyPlaceholderConfigurer使用,因為在spring 3.1之前版本是沒有Enviroment的,所以OVERRIDE是spring 3.1之前版本的Environment 
NEVER:只查詢properties-ref、location; 
order:當配置多個<context:property-placeholder/>時的查詢順序

使用注意: 
1.location中的載入檔案的順序 
如果location中有多個檔案: 
classpath:db.properties,classpath:default.properties,classpath:default3.properties,classpath:default2.properties
將依次載入,值得注意的是如果後一個檔案中有和前面某一個檔案中屬性名是相同的,最終取的值是後加載的值 
舉例來說: 
default.properties檔案中有個屬性名userId,其對應的值為-1 
default2.properties檔案中也有一個屬性名userId,其對應的值為-2 
default3.properties檔案中特有一個屬性名userId,其對於那個的值為-3

default.properties檔案先載入,此時userId的值為-1,當default3.properties檔案載入時將更新原來的值,此時userId的值為-3,同理,最後載入default2.properties檔案,所以userId最終值為-2 
所以需要避免不同屬性檔案中的屬性名稱重名

2.ignore-resource-not-found和ignore-unresolvable兩個屬性是類似的作用,推薦配對使用 
如果location中的檔案指向了一個不存在的檔案,那麼也極有可能意味著有屬性無法解析(雖然存在其他屬性檔案中存在重名,但是這個是應該避免的) 
所以當ignore-resource-not-found設為true時,ignore-unresolvable也必須設為true,其實當ignore-unresolvable設為true時,ignore-resource-not-found的值true或false,並不影響異常的丟擲 
如果設定為ture,後屬性值無法解析成功,將賦值為${屬性名} 
不推薦將ignore-resource-not-found和ignore-unresolvable的值設定為ture,預設為false,可以有效避免程式執行異常

3.properties-ref屬性 
引入其他方式引入的屬性檔案

<bean id="refProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    <property name="locations">
        <list>
            <value>classpath:default2.properties</value>
        </list>
    </property>
</bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

該屬性需要local-override配合使用,只有當local-override屬性值為true時,properties-ref屬性檔案中屬性值將覆蓋location屬性檔案屬性值(同名屬性)

4.local-override屬性 
當local-override屬性值為true時,properties-ref屬性檔案中屬性值將覆蓋location屬性檔案屬性值(同名屬性)

5.sytem-properties-mode屬性 
不同的sytem-properties-mode屬性定義了不同的查詢順序 
Environment環境:包括JDK環境,系統環境變數,Sevlet環境,Spring環境等,是Spring在3.1之後抽象的一個表示環境配置

在local-override屬性值為false,sytem-properties-mode屬性值為ENVIRONMENT或OVRRIDE時,查詢順序是location,然後是environment或者System.getProperty(),System.getenv()(Spring 3.1 之前) 
即現載入location指向的屬性檔案,再加之environment指向的環境,當environment環境中存在和location指向的屬性檔案中同名的屬性,則該屬性的值將被修改,取決於environment環境中的值 
如果sytem-properties-mode屬性值為NEVER,則只查詢location指向的屬性檔案

當local-override屬性值為true時,最後將載入properties-ref指向的檔案,如遇到同名的,該同名屬性值將取決於properties-ref指向的檔案中的值

所以,最終程式中獲取的值將是一個綜合作用後的值,一般情況下建議sytem-properties-mode屬性值為NEVER避免ENVIRONMENT環境中的不可控

相關推薦

Spring配置檔案標籤每個配置檔案只能實用

<context:property-placeholder>標籤提供了一種優雅的外在化引數配置的方式,不過該標籤在Spring配置檔案中只能存在一份!!! 眾所周知,Spring容器是採用反射掃描的發現機制,通過標籤的名稱空間例項化例項,當Spring探測到

出現錯誤提示:各個節在每個配置檔案只能出現。有關異常的資訊請參閱幫助主題 。

在web.config配置檔案中,每一個節只能出現一次。你的某個節出現在了web.config中兩次,因此報這種錯誤. 解決辦法:仔細查詢 web.config 檔案,看一下有沒有重複的節點,

上傳檔案的input框的change時間只能觸發的原因

html程式碼: <tr>     <td><label for="pic" style="font-weight:normal;">圖片</label

類成員的可訪問性(不管怎麼設計實現某一個類在記憶體只能呼叫)單態設計模式

為了控制建立物件的個數,需要收回建立物件的權利,下面想辦法設定Teacher為記憶體中唯一物件,在Text中建立並使用Teacher; Teacher package cn.net.sdkd.cise; public class Teacher { pri

Spring整合mybatis時資料庫配置com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver區別

1、#mysql-connector-java 5 用法 spring.datasource.driver-calss-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnico

Spring Boot 實踐折騰記(四):配置即使用常用配置

生活不可能像你想象的那麼好,但也不會像你想象的那麼糟。我覺得人的脆弱和堅強都超乎自己的想象。有時,可能脆弱得一句話就淚流滿面;有時,也發現自己咬著牙走了很長的路。——源自 莫泊桑 開始前… 本章內容主要介紹的是Spring Boot常用的配置,相對前

spring的事務管理xml配置和註解方式優先順序

在spring中,對於事務的管理可以通過xml配置的方式去設定,也可以通過@Translation註解去設定,如果兩個同時設定了會怎麼樣呢? 測試方法: 1、在xml中設定事務的某個屬性值 2、採用註解設定與xml配置相反的屬性值 3、測試兩次,分別進行

centos 7配置靜態IP配置DNS

emctl 文件 網卡 管理器 sco auto .html b2b 進行 centos 7配置靜態IP,並配置DNS cd /etc/sysconfig/network-scripts/找到對應的網卡配置並編輯 vim ifcfg-eno16777736配置eno-167

Linux下grep獲取檔案的最後匹配項

如題:使用grep獲取檔案中的最後一次匹配項 grep '查詢的內容' -A 100 檔名 | tail -n 101 grep獲取檔案中的最後一次匹配項,以及後面100行, 注意是tail -n 101而不是tail -n 100,因為tail -n 100將不會顯示匹配內

Qt 指定目標檔案目錄以及拷貝檔案到指定路徑

# 拷貝生成檔案到指定目錄:   out_pwd 生成的target檔案的當前路徑(絕對路徑);pwd是 .pro檔案所在的當前路徑#QMAKE_POST_LINK = cp $$OUT_PWD/lib$$TARGET.a  $$PWD/../../lib/

Tomcat8配置Https協議Tomcat配置Https安全訪問Tomcat Https配置

Tomcat8配置Https協議,Tomcat配置Https安全訪問,Tomcat Https配置   ============================== ©Copyright 蕃薯耀 2017年11月06日 http://www.cnblogs.com

java檔案操作 (1)——判別指定檔案是否存在讀取檔案修改時間和大小讀取文字檔案內容向文字檔案寫入指定內容

任務要求: 完成一個java application應用程式,判別指定路徑下指定檔名的檔案是否存在。 如果指定檔案存在,讀取並分別顯示其修改時間和檔案大小等屬性。 以文字方式開啟某一指定路徑指定檔名的文字檔案,讀取其內容並顯示。 以文字方式向某

hadoop在讀sequence檔案會將檔案拷貝兩份然後進map處理

讀取sequencefile,在設定輸入路徑的時候,如果設定成 SequenceFileInputFormat.addInputPath(job, new Path(args[0])); 則會把檔案拷貝兩份。 正確的還是應該設定成: FileInputFormat.s

maven 下載映象檔案下載pom檔案慢的問題

問題原因:   maven預設的映象庫URL為 http://maven.net.cn/content/groups/public/   由於網路原因,可能導致響應速度超級慢,或者無法效應; 解決方法:   配置國內的映象庫;   比如阿里雲: <mirror>

c語言多檔案程式設計即main檔案呼叫其他.c檔案的方法

c語言多檔案程式設計,即main檔案呼叫其他.c檔案的方法。 兩種方法的區別就是,gcc編譯時,是否加b.c檔案,不加的話,就在a.c檔案裡面,加#include "b.c" 至於extern 那一句,是否新增,編譯都是可以通過的,只是填加上去,大家都知道了,這個函式在其他地方定義了,這個地方只是呼

lseek函式 操作檔案指標實現計算檔案長度構建空洞檔案

lseek(fd,   偏移量,   參照物即從哪裡開始移動); off_t lseek(int fd, off_t offset, int whence); 計算檔案長度程式碼: #include <sys/types.h> #include <uni

oracle 12c DMP檔案匯出oracle 11gDMP檔案匯入

首先,我們都知道一點,由於版本問題,dmp檔案的匯出匯入會報錯,而低版本的匯出,高版本是可以直接匯入的,它能相容低版本 而高版本匯出,想要匯入低版本,這個就有問題了,會提示版本的相容問題,別人的解決方法我不知道,當然我也嘗試過了,但是在我這裡沒有成功。所以我嘗試了一下逼得辦

koa2獲取圖片並返回設定靜態檔案目錄訪問本地檔案

// uri: 'http://images5.fanpop.com/image/photos/30900000/beautiful-pic-different-beautiful-pictures-30958249-1600-1200.jpg'

對串列埠的讀寫將讀取的內容寫在檔案以及一些檔案的讀寫操作

串列埠讀寫操作(上) 隔了好多天,終於要來發布我的第二篇心得了。鑑於之前寫過的一些關於檔案讀寫的操作,這次我要寫的是對串列埠的讀寫以及一些操作。 以下是關於串列埠定義的一些函式。

IO流--利用bufferedstream在控制檯輸入檔案路徑並將檔案複製到桌面

class hello { public static void main(String[] args) throws IOException { BufferedInputStream input = new BufferedInputStream(new FileInpu