Spring加載properties文件的方法
在項(xiàng)目中如果有些參數(shù)經(jīng)常需要修改,或者后期可能需要修改,那我們最好把這些參數(shù)放到properties文件中,源代碼中讀取properties里面的配置,這樣后期只需要改動(dòng)properties文件即可,不需要修改源代碼,這樣更加方便。在Spring中也可以這么做,而且Spring有兩種加載properties文件的方式:基于xml方式和基于注解方式。
下面分別討論下這兩種方式。
1. 通過(guò)xml方式加載properties文件
我們以Spring實(shí)例化dataSource為例,我們一般會(huì)在beans.xml文件中進(jìn)行如下配置:
<!-- com.mchange.v2.c3p0.ComboPooledDataSource類(lèi)在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>
現(xiàn)在如果我們要改變dataSource,我們就得修改這些源代碼,但是我們?nèi)绻褂胮roperties文件的話,只需要修改那里面的即可,就不管源代碼的東西了。那么如何做呢?
Spring中有個(gè)<context:property-placeholder location=""/>標(biāo)簽,可以用來(lái)加載properties配置文件,location是配置文件的路徑,我們現(xiàn)在在工程目錄的src下新建一個(gè)conn.properties文件,里面寫(xiě)上上面dataSource的配置:
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc\:mysql\://localhost\:3306/shop user=root password=root
現(xiàn)在只需要在beans.xml中做如下修改即可:
<context:property-placeholder location="classpath:conn.properties"/><!-- 加載配置文件 --> <!-- com.mchange.v2.c3p0.ComboPooledDataSource類(lèi)在c3p0-0.9.5.1.jar包的com.mchange.v2.c3p0包中 --> <bean id="dataSource" class="${dataSource}"> <!-- 這些配置Spring在啟動(dòng)時(shí)會(huì)去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=""/>標(biāo)簽也可以用下面的<bean>標(biāo)簽來(lái)代替,<bean>標(biāo)簽我們更加熟悉,可讀性更強(qiáng):
<!-- 與上面的配置等價(jià),下面的更容易理解 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <!-- PropertyPlaceholderConfigurer類(lèi)中有個(gè)locations屬性,接收的是一個(gè)數(shù)組,即我們可以在下面配好多個(gè)properties文件 --> <array> <value>classpath:conn.properties</value> </array> </property> </bean>
雖然看起來(lái)沒(méi)有上面的<context:property-placeholder location=""/>簡(jiǎn)潔,但是更加清晰,建議使用后面的這種。但是這個(gè)只限于xml的方式,即在beans.xml中用${key}獲取配置文件中的值value。
2. 通過(guò)注解方式加載properties文件
還有一種就是通過(guò)注解的方式,在java代碼中使用@Value注解來(lái)加載配置文件中的值。
我們來(lái)看一個(gè)例子:假如我們要在程序中獲取某個(gè)文件的絕對(duì)路徑,我們很自然會(huì)想到不能在程序中寫(xiě)死,那么我們也可以卸載properties文件中。還是在src目錄下新建一個(gè)public.properties文件,假設(shè)里面寫(xiě)了一條記錄:
filePath=E\:\\web\\apache-tomcat-8.0.26\\webapps\\E_shop\\image
如果想在java代碼中通過(guò)注解來(lái)獲取這個(gè)filePath的話,首先得在beans.xml文件中配置一下注解的方式:
<!-- 第二種方式是使用注解的方式注入,主要用在java代碼中使用注解注入properties文件中相應(yīng)的value值 --> <bean id="prop" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="locations"><!-- 這里是PropertiesFactoryBean類(lèi),它也有個(gè)locations屬性,也是接收一個(gè)數(shù)組,跟上面一樣 <array> <value>classpath:public.properties</value> </array> </property> </bean>
現(xiàn)在我們可以在java代碼中使用注解來(lái)獲取filePath的值了:
@Component("fileUpload") public class FileUploadUtil implements FileUpload { private String filePath; @Value("#{prop.filePath}") //@Value表示去beans.xml文件中找id="prop"的bean,它是通過(guò)注解的方式讀取properties配置文件的,然后去相應(yīng)的配置文件中讀取key=filePath的對(duì)應(yīng)的value值 public void setFilePath(String filePath) { System.out.println(filePath); this.filePath = filePath; }
注意要有set方法才能被注入進(jìn)來(lái),注解寫(xiě)在set方法上即可。在setFilePath方法中通過(guò)控制臺(tái)打印filePath是為了在啟動(dòng)tomcat的時(shí)候,觀察控制臺(tái)有沒(méi)有輸出來(lái),如果有,說(shuō)明Spring在啟動(dòng)時(shí),已經(jīng)將filePath給加載好了,我們看一下控制臺(tái)的啟動(dòng)信息:
以上就是Spring加載properties配置文件的兩種方式。實(shí)際上,上面基于xml方式中的PropertyPlaceholderConfigurer類(lèi)和這里基于注解方式的PropertiesFactoryBean類(lèi)都是繼承PropertiesLoaderSupport,都是用來(lái)加載properties配置文件的。
原文地址:http://blog.csdn.net/eson_15/article/details/51365707
如有不對(duì)的地方請(qǐng)大家諒解,謝謝大家的閱讀。
- 在SpringBoot下讀取自定義properties配置文件的方法
- SpringBoot獲取yml和properties配置文件的內(nèi)容
- 詳解Spring Boot加載properties和yml配置文件
- 詳解SpringMVC加載配置Properties文件的幾種方式
- 詳解spring boot 使用application.properties 進(jìn)行外部配置
- Spring Boot中配置文件application.properties使用
- Spring Boot2.0 @ConfigurationProperties使用詳解
- spring boot使用i18n時(shí)properties文件中文亂碼問(wèn)題的解決方法
- Spring中配置和讀取多個(gè)Properties文件的方式方法
- 詳解Spring加載Properties配置文件的四種方式
- Spring中屬性文件properties的讀取與使用詳解
- 談?wù)凷pring 注入properties文件總結(jié)
- spring boot application properties配置實(shí)例代碼詳解
- Spring Boot的properties配置文件讀取
- spring boot中的properties參數(shù)配置詳解
- Spring用代碼來(lái)讀取properties文件實(shí)例解析
- Spring加載properties文件的兩種方式實(shí)例詳解
- spring無(wú)法讀取properties文件數(shù)據(jù)問(wèn)題詳解
相關(guān)文章
SpringBoot集成Redis并實(shí)現(xiàn)主從架構(gòu)的實(shí)踐
本文主要和大家分享一下在springboot中如何集成redis,并實(shí)現(xiàn)主從架構(gòu),進(jìn)行數(shù)據(jù)的簡(jiǎn)單存儲(chǔ),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Spring Shell應(yīng)用程序開(kāi)發(fā)流程解析
這篇文章主要介紹了Spring Shell應(yīng)用程序開(kāi)發(fā)流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Spring MVC全局異常處理和單元測(cè)試_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
本篇文章主要介紹了Spring MVC全局異常處理和單元測(cè)試,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08淺談java中為什么重寫(xiě)equals后需要重寫(xiě)hashCode
今天帶各位學(xué)習(xí)一下java中為什么重寫(xiě)equals后需要重寫(xiě)hashCode,文中有非常詳細(xì)的圖文介紹及代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-05-05java實(shí)現(xiàn)Flappy Bird游戲源代碼
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)Flappy Bird游戲源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12Java中子類(lèi)調(diào)用父類(lèi)構(gòu)造方法的問(wèn)題分析
本篇文章介紹了,Java中子類(lèi)調(diào)用父類(lèi)構(gòu)造方法的問(wèn)題分析。需要的朋友參考下2013-04-04非常詳細(xì)的Java異常處理機(jī)制知識(shí)整理大全
Java異常指在程序運(yùn)行時(shí)可能出現(xiàn)的一些錯(cuò)誤,比如試圖打開(kāi)一個(gè)根本不存在的文件等,異常處理將會(huì)改變程序的控制流程,讓程序有機(jī)會(huì)對(duì)錯(cuò)誤做出處理,下面這篇文章主要給大家介紹了關(guān)于Java異常處理機(jī)制知識(shí)整理的相關(guān)資料,需要的朋友可以參考下2022-11-11Java方法遞歸的形式和常見(jiàn)遞歸算法(方法遞歸結(jié)合File類(lèi)查找文件)
方法遞歸方法直接調(diào)用自己或者間接調(diào)用自己的形式稱(chēng)為方法遞歸( recursion),遞歸做為一種算法在程序設(shè)計(jì)語(yǔ)言中廣泛應(yīng)用,這篇文章主要介紹了Java方法遞歸的形式和常見(jiàn)遞歸算法-方法遞歸結(jié)合File類(lèi)查找文件,需要的朋友可以參考下2023-02-02