一、propertyPlaceholderConfigurer读取配置文件

1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现,也就是 BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文(配置文 件)中的属性值放在另一个单独的标准java Properties文件中去。在XML文件中用${key}替换指定的properties文件中的值。这样的话,只需要对properties文件进 行修改,而不用对xml配置文件进行修改。

2.在Spring中,使用PropertyPlaceholderConfigurer可以在XML配置文件中加入外部属性文件,当然也可以指定外部文件的编码,如:

<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   <property name="location">
   <value>conf/jdbc.properties</value>
   </property>
   <property name="fileEncoding">
      <value>UTF-8</value>
   </property>
</bean>

3.PropertyPlaceholderConfigurer起的作用就是将占位符指向的数据库配置信息放在bean中定义的工具。

4.查看源代码,可以发现,locations属性定义在PropertyPlaceholderConfigurer的祖父类 PropertiesLoaderSupport中,而location只有 setter方法。类似于这样的配置,在spring的源程序中很常见的。

PropertyPlaceholderConfigurer如果在指定的Properties文件中找不到你想使用的属性,它还会在Java的System类属性中查找。

我们可以通过System.setProperty(key, value)或者java中通过-Dnamevalue来给Spring配置文件传递参数。

<bean class="com.slp.util.SpringContextHolder"/>
        <bean id="propertyConfigurer"
        class="com.slp.util.CustomizedPropertyConfigurer">
        <property name="locations">
            <list>
                <value>classpath:conf/jdbc.properties</value>                <value>classpath:conf/config.properties</value>                <value>classpath:conf/server.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>
package com.slp.util;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class CustomizedPropertyConfigurer extends PropertyPlaceholderConfigurer {

    private static Map<String,String> ctxPropMap;

    @Override
    protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props) throws BeansException {
        super.processProperties(beanFactoryToProcess, props);
        ctxPropMap = new HashMap<>();
        for (Object key : props.keySet()){
            String keyStr = key.toString();
            String value = String.valueOf(props.get(keyStr));
            ctxPropMap.put(keyStr,value);
        }
    }

    public static String getCtxProp(String name) {
        return ctxPropMap.get(name);
    }

    public static Map<String, String> getCtxPropMap() {
        return ctxPropMap;
    }
}

//使用的时候如下即可
CustomizedPropertyConfigurer.getCtxProp("xxx")

二、配置数据库资源

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">

	<context:component-scan base-package="com.cnten" />
	<context:component-scan base-package="com.cnten.platform.attachment" />
	<!-- <context:property-placeholder location="/WEB-INF/uploadDir.properties" /> -->
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>/WEB-INF/hibernate.properties</value>
				<value>/WEB-INF/uploadDir.properties</value>
			</list>
		</property>
	</bean>
	<bean id="jdbc/oracle" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${hibernate.driverClass}"></property>
		<property name="user" value="${hibernate.username}"></property>
		<property name="password" value="${hibernate.password}"></property>
		<property name="jdbcUrl" value="${hibernate.jdbcUrl}"></property>
		<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
		<property name="initialPoolSize" value="20" />
		<!--连接池中保留的最小连接数。 -->
		<property name="minPoolSize" value="1" />
		<!--连接池中保留的最大连接数。Default: 15 -->
		<property name="maxPoolSize" value="300" />
		<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
		<property name="maxIdleTime" value="60" />
		<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
		<property name="acquireIncrement" value="5" />
		<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
		<property name="idleConnectionTestPeriod" value="60" />
	</bean>

	<bean id="jdbc/mySql" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
		<property name="driverClass" value="${mysql.driverClass}"></property>
		<property name="user" value="${mysql.userName}"></property>
		<property name="password" value="${mysql.password}"></property>
		<property name="jdbcUrl" value="${mysql.jdbcUrl}"></property>
		<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
		<property name="initialPoolSize" value="20" />
		<!--连接池中保留的最小连接数。 -->
		<property name="minPoolSize" value="1" />
		<!--连接池中保留的最大连接数。Default: 15 -->
		<property name="maxPoolSize" value="300" />
		<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
		<property name="maxIdleTime" value="60" />
		<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
		<property name="acquireIncrement" value="5" />
		<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
		<property name="idleConnectionTestPeriod" value="60" />
	</bean>

</beans>

hibernate.properties

hibernate.beanid=hibernate
hibernate.name=\u7CFB\u7EDF\u9ED8\u8BA4\u6570\u636E\u6E90
hibernate.driverClass=oracle.jdbc.driver.OracleDriver
hibernate.default_schema=MONITMEAS
hibernate.username=MONITMEAS
hibernate.password=MONITMEAS
hibernate.jdbcUrl=jdbc:oracle:thin:@192.168.1.100:1521:orcl
hibernate.dialect=org.hibernate.dialect.OracleDialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=update
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.cache.use_query_cache=true
hibernate.packages.to.scan.one=com.base.po
hibernate.packages.to.scan.two=com.base.po.*

mysql.driverClass=com.mysql.jdbc.Driver
mysql.jdbcUrl=jdbc:mysql://192.168.1.161:3306/platform?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true
mysql.userName=PLATFORM
mysql.password=PLATFORM

uploadDir.properties

upload.base_dir=F\:\\BDCUpload

 

 

 

10-05 14:29