Spring加載properties文件的辦法。本站提示廣大學習愛好者:(Spring加載properties文件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Spring加載properties文件的辦法正文
在項目中假如有些參數常常須要修正,或許前期能夠須要修正,那我們最好把這些參數放到properties文件中,源代碼中讀取properties外面的設置裝備擺設,如許前期只須要修改properties文件便可,不須要修正源代碼,如許加倍便利。在Spring中也能夠這麼做,並且Spring有兩種加載properties文件的方法:基於xml方法和基於注解方法。
上面分離評論辯論下這兩種方法。
1. 經由過程xml方法加載properties文件
我們以Spring實例化dataSource為例,我們普通會在beans.xml文件中停止以下設置裝備擺設:
<!-- com.mchange.v2.c3p0.ComboPooledDataSource類在c3p0-0.9.5.1.jar包的com.mchange.v2.c3p0包中 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/shop" /> <property name="user" value="root" /> <property name="password" value="root" /> </bean>
如今假如我們要轉變dataSource,我們就得修正這些源代碼,然則我們假如應用properties文件的話,只須要修正那邊面的便可,就不論源代碼的器械了。那末若何做呢?
Spring中有個<context:property-placeholder location=""/>標簽,可以用來加載properties設置裝備擺設文件,location是設置裝備擺設文件的途徑,我們如今在工程目次的src下新建一個conn.properties文件,外面寫上下面dataSource的設置裝備擺設:
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc\:mysql\://localhost\:3306/shop user=root password=root
如今只須要在beans.xml中做以下修正便可:
<context:property-placeholder location="classpath:conn.properties"/><!-- 加載設置裝備擺設文件 --> <!-- com.mchange.v2.c3p0.ComboPooledDataSource類在c3p0-0.9.5.1.jar包的com.mchange.v2.c3p0包中 --> <bean id="dataSource" class="${dataSource}"> <!-- 這些設置裝備擺設Spring在啟動時會去conn.properties中找 --> <property name="driverClass" value="${driverClass}" /> <property name="jdbcUrl" value="${jdbcUrl}" /> <property name="user" value="${user}" /> <property name="password" value="${password}" /> </bean>
<context:property-placeholder location=""/>標簽也能夠用上面的<bean>標簽來取代,<bean>標簽我們加倍熟習,可讀性更強:
<!-- 與下面的設置裝備擺設等價,上面的更輕易懂得 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <!-- PropertyPlaceholderConfigurer類中有個locations屬性,吸收的是一個數組,即我們可以鄙人面配很多多少個properties文件 --> <array> <value>classpath:conn.properties</value> </array> </property> </bean>
固然看起來沒有下面的<context:property-placeholder location=""/>簡練,然則加倍清楚,建議應用前面的這類。然則這個只限於xml的方法,即在beans.xml頂用${key}獲得設置裝備擺設文件中的值value。
2. 經由過程注解方法加載properties文件
還有一種就是經由過程注解的方法,在java代碼中應用@Value注解來加載設置裝備擺設文件中的值。
我們來看一個例子:假設我們要在法式中獲得某個文件的相對途徑,我們很天然會想到不克不及在法式中寫逝世,那末我們也能夠卸載properties文件中。照樣在src目次下新建一個public.properties文件,假定外面寫了一筆記錄:
filePath=E\:\\web\\apache-tomcat-8.0.26\\webapps\\E_shop\\image
假如想在java代碼中經由過程注解來獲得這個filePath的話,起首得在beans.xml文件中設置裝備擺設一下注解的方法:
<!-- 第二種方法是應用注解的方法注入,重要用在java代碼中應用注解注入properties文件中響應的value值 --> <bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"><!-- 這裡是PropertiesFactoryBean類,它也有個locations屬性,也是吸收一個數組,跟下面一樣 <array> <value>classpath:public.properties</value> </array> </property> </bean>
如今我們可以在java代碼中應用注解來獲得filePath的值了:
@Component("fileUpload") public class FileUploadUtil implements FileUpload { private String filePath; @Value("#{prop.filePath}") //@Value表現去beans.xml文件中找id="prop"的bean,它是經由過程注解的方法讀取properties設置裝備擺設文件的,然後去響應的設置裝備擺設文件中讀取key=filePath的對應的value值 public void setFilePath(String filePath) { System.out.println(filePath); this.filePath = filePath; }
留意要有set辦法能力被注入出去,注解寫在set辦法上便可。在setFilePath辦法中經由過程掌握台打印filePath是為了在啟動tomcat的時刻,不雅察掌握台有無輸入來,假如有,解釋Spring在啟動時,曾經將filePath給加載好了,我們看一下掌握台的啟動信息:
以上就是Spring加載properties設置裝備擺設文件的兩種方法。現實上,下面基於xml方法中的PropertyPlaceholderConfigurer類和這裡基於注解方法的PropertiesFactoryBean類都是繼續PropertiesLoaderSupport,都是用來加載properties設置裝備擺設文件的。
原文地址:http://blog.csdn.net/eson_15/article/details/51365707
若有纰謬的處所請年夜家原諒,感謝年夜家的浏覽。