﻿<?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:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">  
    <!-- 自动扫描 -->  
    <context:component-scan base-package="com.spd.sw.dao,com.spd.sw.service,com.spd.sw.model" />  
    <!-- 引入配置文件 -->  
    <bean id="propertyConfigurer"  
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:jdbc.properties" />  
    </bean>  
    
    <!-- 动态数据库 -->
    <bean id="dynamicDB" class="com.spd.sw.dynamicdb.DynamicDB" >
    <property name="targetDataSources">
        <map key-type="java.lang.String">
            <!--通过不同的key决定用哪个dataSource-->
            <entry value-ref="dataSource" key="base"></entry><!-- 这个是指向api配置库 一般不改 -->   
			<entry value-ref="dataSource1" key="dayiep"></entry><!-- 后面的是业务数据库 -->  
             <entry value-ref="dataSource2" key="msuser"></entry><!-- 后面的是用户数据库 -->        
            <entry value-ref="dataSource5" key="msmap"></entry><!-- 后面的是业务数据库 -->  
        </map>
    </property>
    <!--设置默认的dataSource-->
    <property name="defaultTargetDataSource" ref="dataSource">
    </property>
	</bean>
  
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"  init-method="init" destroy-method="close">  
        <!-- 基本属性 url、user、password -->
      <property name="url" value="${jdbc_url}" />
      <property name="username" value="${jdbc_username}" />
      <property name="password" value="${jdbc_password}" />
      <!-- 配置初始化大小、最小、最大 -->
      <property name="initialSize" value="30" />
      <property name="minIdle" value="30" /> 
      <property name="maxActive" value="50" />
      <!-- 配置获取连接等待超时的时间 -->
      <property name="maxWait" value="60000" />
      <!-- 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 -->
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
      <!-- 配置一个连接在池中最小生存的时间，单位是毫秒 -->
      <property name="minEvictableIdleTimeMillis" value="300000" />
      
      <property name="validationQuery" value="SELECT 1" />
      <property name="testWhileIdle" value="true" />
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
      <!-- 打开PSCache，并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="false" />
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
      <!-- 配置监控统计拦截的filters -->
      <property name="filters" value="stat" /> 
    </bean> 
	
	<bean id="dataSource1" class="com.alibaba.druid.pool.DruidDataSource"  init-method="init" destroy-method="close">  
        <!-- 基本属性 url、user、password -->
      <property name="url" value="${jdbc_url_dy}" />
      <property name="username" value="${jdbc_username_dy}" />
      <property name="password" value="${jdbc_password_dy}" />
      <!-- 配置初始化大小、最小、最大 -->
      <property name="initialSize" value="30" />
      <property name="minIdle" value="30" /> 
      <property name="maxActive" value="50" />
      <!-- 配置获取连接等待超时的时间 -->
      <property name="maxWait" value="60000" />
      <!-- 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 -->
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
      <!-- 配置一个连接在池中最小生存的时间，单位是毫秒 -->
      <property name="minEvictableIdleTimeMillis" value="300000" />
      
      <property name="validationQuery" value="SELECT 1" />
      <property name="testWhileIdle" value="true" />
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
      <!-- 打开PSCache，并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="false" />
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
      <!-- 配置监控统计拦截的filters -->
      <property name="filters" value="stat" /> 
    </bean>
     
    
      <bean id="dataSource2" class="com.alibaba.druid.pool.DruidDataSource"  init-method="init" destroy-method="close">  
        <!-- 基本属性 url、user、password -->
      <property name="url" value="${jdbc_url_u}" />
      <property name="username" value="${jdbc_username_u}" />
      <property name="password" value="${jdbc_password_u}" />
      <!-- 配置初始化大小、最小、最大 -->
      <property name="initialSize" value="30" />
      <property name="minIdle" value="30" /> 
      <property name="maxActive" value="50" />
      <!-- 配置获取连接等待超时的时间 -->
      <property name="maxWait" value="60000" />
      <!-- 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 -->
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
      <!-- 配置一个连接在池中最小生存的时间，单位是毫秒 -->
      <property name="minEvictableIdleTimeMillis" value="300000" />
      
      <property name="validationQuery" value="SELECT 1" />
      <property name="testWhileIdle" value="true" />
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
      <!-- 打开PSCache，并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="false" />
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
      <!-- 配置监控统计拦截的filters -->
      <property name="filters" value="stat" /> 
    </bean>
    
    <bean id="dataSource5" class="com.alibaba.druid.pool.DruidDataSource"  init-method="init" destroy-method="close">  
        <!-- 基本属性 url、user、password -->
      <property name="url" value="${jdbc_url_User}" />
      <property name="username" value="${jdbc_username_User}" />
      <property name="password" value="${jdbc_password_User}" />
      <!-- 配置初始化大小、最小、最大 -->
      <property name="initialSize" value="30" />
      <property name="minIdle" value="30" /> 
      <property name="maxActive" value="50" />
      <!-- 配置获取连接等待超时的时间 -->
      <property name="maxWait" value="60000" />
      <!-- 配置间隔多久才进行一次检测，检测需要关闭的空闲连接，单位是毫秒 -->
      <property name="timeBetweenEvictionRunsMillis" value="60000" />
      <!-- 配置一个连接在池中最小生存的时间，单位是毫秒 -->
      <property name="minEvictableIdleTimeMillis" value="300000" />
      
      <property name="validationQuery" value="SELECT 1" />
      <property name="testWhileIdle" value="true" />
      <property name="testOnBorrow" value="false" />
      <property name="testOnReturn" value="false" />
      <!-- 打开PSCache，并且指定每个连接上PSCache的大小 -->
      <property name="poolPreparedStatements" value="false" />
      <property name="maxPoolPreparedStatementPerConnectionSize" value="20" />
      <!-- 配置监控统计拦截的filters -->
      <property name="filters" value="stat" /> 
    </bean>
     

    <!-- spring和MyBatis完美整合，不需要mybatis的配置映射文件 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
         <!-- <property name="dataSource" ref="dataSource" />   -->  
         <property name="dataSource" ref="dynamicDB" />  
        <!-- 自动扫描mapping.xml文件 -->  
        <property name="mapperLocations" value="classpath:mappers/*.xml"></property>  
         <!-- mybatis配置 文件 --> 
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>  
    </bean>  
  
    <!-- DAO接口所在包名，Spring会自动查找其下的类 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <property name="basePackage" value="com.spd.sw.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>  
  
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <!-- <property name="dataSource" ref="dataSource" />   -->  
         <property name="dataSource" ref="dynamicDB" />  
    </bean>  
  
</beans>  