zoukankan      html  css  js  c++  java
  • PropertyPlaceholderConfigurer

    转:

    http://blog.csdn.net/sz_bdqn/article/details/6666262

     

    要了解这个类首先要弄清楚一个概念:bean factory post-processor
    官方解释是这样的:
    A bean factory post-processor is a java class which implements the
    org.springframework.beans.factory.config.BeanFactoryPostProcessor interface. It is executed manually (in the case of the BeanFactory) or automatically (in the case of the ApplicationContext) to apply changes of some sort to an entire BeanFactory, after it has been constructed.
    我理解的意思是这样的:
    1.首先bean factory post-processor实现了org.springframework.beans.factory.config.BeanFactoryPostProcessor接口。
    2.在BeanFactory的情况下它被手动的执行。
    3.在ApplicationContext的条件下它会自动的执行。
    4.最关键的一点是,是在一个类的实例被构造出来之后,对整个BeanFactory进行修改。

     

    spring属性占位符PropertyPlaceholderConfigurer的使用

    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-8
    database.user=root
    database.password=root
    jdbc.pool.c3p0.acquire_increment=2
    jdbc.pool.c3p0.max_size=20
    jdbc.pool.c3p0.min_size=2
    jdbc.pool.c3p0.preferred_test_query='SELECT 1'
    jdbc.pool.c3p0.idle_connection_test_period=18000
    jdbc.pool.c3p0.max_idle_time=25000

    1.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了:

    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">     <property name="locations">        <list>           <value>classpath:/spring/include/jdbc-parms.properties</value>           <value>classpath:/spring/include/base-config.properties</value>         </list>     </property> </bean>

    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

  • 相关阅读:
    命令行编译运行java工程(转)
    JAVA配置环境变量的意义(转)
    在Linux环境下搭建Tomcat+mysql+jdk环境(转)
    java环境变量
    varchar(8000) nvarchar(4000) varchar(max) nvarchar(max) 区别
    HTTP与HTTPS握手的那些事(转载)
    ELK研究-部署搭建运用
    主机规划与磁盘分区
    占位符问题 python pymysql
    django 数据迁移的问题 sqlite3 --> mysql
  • 原文地址:https://www.cnblogs.com/binnzhao/p/6941277.html
Copyright © 2011-2022 走看看