引數配置檔案properties--使用spring載入和簡化讀取
阿新 • • 發佈:2018-12-16
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
Spring 支援在程式碼中使用@Value註解的方式獲取properties檔案中的配置值,從而大大簡化了讀取配置檔案的程式碼。
使用方法如下:
假如有一個引數配置檔案test.properties
- #資料庫配置
- database.type=sqlserver
- jdbc.url=jdbc:sqlserver://192.168.1.105;databaseName=test
- jdbc.username=test
- jdbc.password=test
1、先在配置檔案中宣告一個bean
- <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
> - <property name="locations">
- <array>
- <value>classpath:test.properties</value>
- </array>
- </property>
- </bean>
2、在程式碼中使用@Value()註解
- @Value("${jdbc.url}")
- private String url = "";
這樣就可以獲取到配置檔案中的資料庫url引數值並賦給變數url了,成員變數url不需要寫get、set方法。
當然如果你想在配置檔案的引數值上進行修改後再附上去,可以寫個set方法,把@Value註解改到set方法上,例如:
- @Value("${jdbc.url}")
- public void setUrl(String url) {
- this.url= "http://" + url;
- }
3、不僅如此,還可以直接在spring的配置檔案中使用${XXX}的方式注入,例如:
- <!-- 資料來源 -->
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
- <!-- 基本屬性 url、user、password -->
- <property name="url" value="${jdbc.url}" />
- <property name="username" value="${jdbc.username}" />
- <property name="password" value="${jdbc.password}" />
- </bean>
補充:
之前寫的bean直接指向了spring預設的PropertyPlaceholderConfigurer類,其實也可以重寫它的一些方法,來滿足自己的需求。步驟就是自己定義一個子類繼承PropertyPlaceholderConfigurer,然後重寫裡面的方法(mergeProperties()、loadProperties(Properties props)等),例如:
然後之前宣告的bean的class指向它就行了,如下:
- package com.test;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.util.Properties;
- import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
- /**
- * Spring引數配置載入
- */
- public class MyPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
- //獲取配置檔案的引數和引數值
- protected Properties mergeProperties() throws IOException {
- //呼叫父類的該方法獲取到引數和引數值
- Properties result = super.mergeProperties();
- String url = result.getProperty("jdbc.url");
- //對jdbc.url引數的值前面加上"http://"後再放進去,就實現了引數值的修改
- result.setProperty("jdbc.url", "http://"+url);
- }
- //載入配置檔案
- protected void loadProperties(Properties props) throws IOException {
- if(XXX){//如果滿足某個條件就去載入另外一個配置檔案
- File outConfigFile = new File("配置檔案的全路徑");
- if(outConfigFile.exists()){
- props.load(new FileInputStream(outConfigFile));
- }else{
- super.loadProperties(props);
- }
- }else{
- //否則就繼續載入bean中定義的配置檔案
- super.loadProperties(props);
- }
- }
- }
- <bean class="com.test.MyPropertyPlaceholderConfigurer">
- <propertyname="locations">
- <array>
- <value>classpath:test.properties</value>
- </array>
- </property>
- </bean>