1、一个简单的Demo
1.1、创建conf.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <!-- 使用location属性定义单个配置文件 <property name="location"> <value>classpath:/com/zsw/config/jdbc.properties</value> </property> --> <!-- 使用locations属性定义多个配置文件 --> <property name="locations"> <list> <value>classpath:/com/zsw/config/jdbc.properties</value> </list> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="url"> <value>${database.url}</value> </property> <property name="driverClassName"> <value>${database.driver}</value> </property> <property name="username"> <value>${database.user}</value> </property> <property name="password"> <value>${database.password}</value> </property> </bean></beans>1.2.创建jdbc.properties文件
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/right?useUnicode=true&autoReconnect=true&characterEncoding=UTF-8database.user=rootdatabase.password=rootjdbc.pool.c3p0.acquire_increment=2jdbc.pool.c3p0.max_size=20jdbc.pool.c3p0.min_size=2jdbc.pool.c3p0.preferred_test_query='SELECT 1'jdbc.pool.c3p0.idle_connection_test_period=18000jdbc.pool.c3p0.max_idle_time=250001.3.创建Config.java
package com.zsw.config;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.core.io.FileSystemResource;import org.springframework.jdbc.datasource.DriverManagerDataSource;public class Config { public static void main(String[] args) { XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("src/com/zsw/config/conf.xml")); // 如果要在BeanFactory中使用,bean factory post-processor必须手动运行: PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); cfg.setLocation(new FileSystemResource("src/com/zsw/config/jdbc.properties")); cfg.postProcessBeanFactory(factory); DriverManagerDataSource dataSource = (DriverManagerDataSource) factory.getBean("dataSource");// System.out.println(dataSource.getDriverClassName()); System.out.println(dataSource.getUsername()); // 注意,ApplicationContext能够自动辨认和应用在其上部署的实现了BeanFactoryPostProcessor的bean。这就意味着,当使用ApplicationContext的时候应用PropertyPlaceholderConfigurer会非常的方便。由于这个原因,建议想要使用这个或者其他bean // factory postprocessor的用户使用ApplicationContext代替BeanFactroy。 ApplicationContext context = new ClassPathXmlApplicationContext("com/zsw/config/conf.xml"); DriverManagerDataSource dataSource2 = (DriverManagerDataSource) context.getBean("dataSource"); System.out.println(dataSource2.getUsername()); } }
2.Spring中PropertyPlaceholderConfigurer多种配置方式
2.1配置单个Properties文件
<bean id="propertyConfigurerForAnalysis" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"> <value>classpath:/spring/include/dbQuery.properties</value> </property></bean>其中classpath是引用src目录下的文件写法。
2.2 当存在多个Properties文件时,配置就需使用locations了:
classpath:/spring/include/jdbc-parms.properties classpath:/spring/include/base-config.properties
2.3、接下来我们要使用多个PropertyPlaceholderConfigurer来分散配置,达到整合多工程下的多个分散的Properties 文件,其配置如下:
<bean id="propertyConfigurerForProject1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1" /> <property name="ignoreUnresolvablePlaceholders" value="true" /> <property name="location"> <value>classpath:/spring/include/dbQuery.properties</value> </property></bean>
<bean id="propertyConfigurerForProject2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="2" /> <property name="ignoreUnresolvablePlaceholders" value="true" /> <property name="locations"> <list> <value>classpath:/spring/include/jdbc-parms.properties</value> <value>classpath:/spring/include/base-config.properties</value> </list> </property></bean>
其中order属性代表其加载顺序,而ignoreUnresolvablePlaceholders为是否忽略不可解析的 Placeholder,如配置了多个PropertyPlaceholderConfigurer,则需设置为true