一、spring配置文件、組件讀取外部properties文件方式
-- spring配置文件
<bean id="mySqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="username"><value>${jdbc.user}</value></property> <property name="password"><value>${jdbc.password}</value></property> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>${jdbc.url}</value></property> </bean>
-- properties文件內容 jdbc.url=jdbc:mysql://localhost:3306/cp?useUnicode=true&charaterEncoding=utf-8 jdbc.user=root jdbc.password=123456 jdbc.driverClass=com.mysql.jdbc.Driver
方式一、
在 spring 的配置文件中,加入引入until命名空間:
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd"
<util:properties id="propertiesReader" location="classpath:test.properties" />
方式二、
<context:property-placeholder location="classpath:conn.properties"/>
方式三、讀取多個 properties 文件
<bean id="propertiesReader"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations">
<list>
<!--只會到項目class路徑中查找找文件-->
<value>classpath:*.properties</value>
<!--不僅會到當前項目class路徑,還會到包括jar文件中(class路徑)進行查找; 推薦第一種,比較快-->
<!--<value>classpath:*.properties</value>-->
</list>
</property>
</bean>
或
<bean id="propertiesReader"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<!--只會到項目class路徑中查找找文件-->
<value>classpath:*.properties</value>
<!--不僅會到當前項目class路徑,還會到包括jar文件中(class路徑)進行查找; 推薦第一種,比較快-->
<!--<value>classpath:*.properties</value>-->
</list>
</property>
</bean>
二、PropertiesFactoryBean和PropertyPlaceholderConfigurer的區別如下:
使用 PropertyPlaceholderConfigurer 時,spring組件取值時 @Value表達式的用法是 @Value(value="${properties key}") ,
使用 PropertiesFactoryBean 時,spring組件取值時@Value表達式的用法是 @Value(value="#{configProperties['properties key']}")
@Value(value="${profit.rate.csProfitRate}") double rate; @Value(value="#{configProperties['profit.rate.csProfitRate']}") double rate2; // 變量要有getter和setter方法