bean中声明引用的数据源:
applicationContext.xml
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" 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.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="com.chanjet.chanapp.bizpubsvc" /> <import resource="classpath:springcontext/dubbo-svc-provider.xml" /> <import resource="classpath:springcontext/applicationContext-configreader.xml" /> <import resource="classpath:springcontext/applicationContext-database.xml" /> </beans>
多数据源的配置(applicationContext-database.xml):
<?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:p="http://www.springframework.org/schema/p" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd" default-autowire="byName"> <!--(一) 商务系统 数据源定义 biz(商务库从库) 1, 数据源 2, 事务管理器 3, sql Session 工程 4, maper 文件扫描 装配等 --> <!-- 数据源 --> <bean id="bizDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${dbcp.SQLServer.driver}" /> <property name="url" value="${dbcp.SQLServer.url}" /> <property name="username" value="${dbcp.SQLServer.username}" /> <property name="password" value="${dbcp.SQLServer.password}" /> <!-- Connection Pooling Info --> <property name="validationQuery" value="${dbcp.SQLServer.validationQuery}" /> <property name="initialSize" value="${dbcp.SQLServer.initialSize}" /> <property name="maxActive" value="${dbcp.SQLServer.maxActive}" /> <property name="minIdle" value="${dbcp.SQLServer.minIdle}" /> <property name="maxIdle" value="${dbcp.SQLServer.maxIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${dbcp.SQLServer.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${dbcp.SQLServer.minEvictableIdleTimeMillis}" /> <property name="numTestsPerEvictionRun" value="${dbcp.SQLServer.numTestsPerEvictionRun}" /> <property name="maxWait" value="${dbcp.SQLServer.maxWait}" /> <property name="removeAbandoned" value="${dbcp.SQLServer.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${dbcp.SQLServer.removeAbandonedTimeout}" /> <property name="testOnBorrow" value="${dbcp.SQLServer.testOnBorrow}" /> <property name="testOnReturn" value="${dbcp.SQLServer.testOnReturn}" /> <property name="testWhileIdle" value="${dbcp.SQLServer.testWhileIdle}" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 事务管理器 --> <bean id="bizTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="bizDataSource" /> <qualifier value="bizTX"/> </bean> <!-- for bizTransactionManager 的事务描述 --> <tx:advice id="bizTxAdvice" transaction-manager="bizTransactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <!-- mybatis SqlSessionFactoryBean 工厂 --> <bean id="bizSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatisConfig.xml"></property> <property name="dataSource" ref="bizDataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chanjet.chanapp.bizpubsvc.mapper.biz" /> <property name="sqlSessionFactoryBeanName" value="bizSessionFactory"/> </bean> <!-- biz end --> <!--(二) 客户DB系统 数据源定义 customer 1, 数据源 2, 事务管理器 3, sql Session 工程 4, maper 文件扫描 装配等 --> <!-- 数据源 --> <bean id="customerDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${dbcp.customer.driver}" /> <property name="url" value="${dbcp.customer.url}" /> <property name="username" value="${dbcp.customer.username}" /> <property name="password" value="${dbcp.customer.password}" /> <!-- Connection Pooling Info --> <property name="validationQuery" value="${dbcp.customer.validationQuery}" /> <property name="initialSize" value="${dbcp.customer.initialSize}" /> <property name="maxActive" value="${dbcp.customer.maxActive}" /> <property name="minIdle" value="${dbcp.customer.minIdle}" /> <property name="maxIdle" value="${dbcp.customer.maxIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${dbcp.customer.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${dbcp.customer.minEvictableIdleTimeMillis}" /> <property name="numTestsPerEvictionRun" value="${dbcp.customer.numTestsPerEvictionRun}" /> <property name="maxWait" value="${dbcp.customer.maxWait}" /> <property name="removeAbandoned" value="${dbcp.customer.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${dbcp.customer.removeAbandonedTimeout}" /> <property name="testOnBorrow" value="${dbcp.customer.testOnBorrow}" /> <property name="testOnReturn" value="${dbcp.customer.testOnReturn}" /> <property name="testWhileIdle" value="${dbcp.customer.testWhileIdle}" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 事务管理器 --> <bean id="customerTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="customerDataSource" /> <qualifier value="customerTX"/> </bean> <!-- for customerTransactionManager 的事务描述 --> <tx:advice id="customerTxAdvice" transaction-manager="customerTransactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <!-- mybatis SqlSessionFactoryBean 工厂 --> <bean id="customerSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatisConfig.xml"></property> <property name="dataSource" ref="customerDataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chanjet.chanapp.bizpubsvc.mapper.customer" /> <property name="sqlSessionFactoryBeanName" value="customerSessionFactory"/> </bean> <!-- customer end --> <!-- 呼叫中心 数据源定义 hjzx 1, 数据源 2, 事务管理器 3, sql Session 工程 4, maper 文件扫描 装配等 --> <!-- 数据源 --> <bean id="hjzxDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${dbcp.hjzx.driver}" /> <property name="url" value="${dbcp.hjzx.url}" /> <property name="username" value="${dbcp.hjzx.username}" /> <property name="password" value="${dbcp.hjzx.password}" /> <!-- Connection Pooling Info --> <property name="validationQuery" value="${dbcp.hjzx.validationQuery}" /> <property name="initialSize" value="${dbcp.hjzx.initialSize}" /> <property name="maxActive" value="${dbcp.hjzx.maxActive}" /> <property name="minIdle" value="${dbcp.hjzx.minIdle}" /> <property name="maxIdle" value="${dbcp.hjzx.maxIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${dbcp.hjzx.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${dbcp.hjzx.minEvictableIdleTimeMillis}" /> <property name="numTestsPerEvictionRun" value="${dbcp.hjzx.numTestsPerEvictionRun}" /> <property name="maxWait" value="${dbcp.hjzx.maxWait}" /> <property name="removeAbandoned" value="${dbcp.hjzx.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${dbcp.hjzx.removeAbandonedTimeout}" /> <property name="testOnBorrow" value="${dbcp.hjzx.testOnBorrow}" /> <property name="testOnReturn" value="${dbcp.hjzx.testOnReturn}" /> <property name="testWhileIdle" value="${dbcp.hjzx.testWhileIdle}" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 事务管理器 --> <bean id="hjzxTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="hjzxDataSource" /> <qualifier value="hjzxTX"/> </bean> <!-- for hjzxTransactionManager 的事务描述 --> <tx:advice id="hjzxTxAdvice" transaction-manager="hjzxTransactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <!-- mybatis SqlSessionFactoryBean 工厂 --> <bean id="hjzxSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatisConfig.xml"></property> <property name="dataSource" ref="hjzxDataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chanjet.chanapp.bizpubsvc.mapper.hjzx" /> <property name="sqlSessionFactoryBeanName" value="hjzxSessionFactory"/> </bean> <!-- hjzx end --> <!-- biz线上的psql数据库 数据源定义 data 1, 数据源 2, 事务管理器 3, sql Session 工程 4, maper 文件扫描 装配等 --> <!-- 数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${dbcp.pg.driver}" /> <property name="url" value="${dbcp.pg.url}" /> <property name="username" value="${dbcp.pg.username}" /> <property name="password" value="${dbcp.pg.password}" /> <!-- Connection Pooling Info --> <property name="validationQuery" value="${dbcp.pg.validationQuery}" /> <property name="initialSize" value="${dbcp.pg.initialSize}" /> <property name="maxActive" value="${dbcp.pg.maxActive}" /> <property name="minIdle" value="${dbcp.pg.minIdle}" /> <property name="maxIdle" value="${dbcp.pg.maxIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${dbcp.pg.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${dbcp.pg.minEvictableIdleTimeMillis}" /> <property name="numTestsPerEvictionRun" value="${dbcp.pg.numTestsPerEvictionRun}" /> <property name="maxWait" value="${dbcp.pg.maxWait}" /> <property name="removeAbandoned" value="${dbcp.pg.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${dbcp.pg.removeAbandonedTimeout}" /> <property name="testOnBorrow" value="${dbcp.pg.testOnBorrow}" /> <property name="testOnReturn" value="${dbcp.pg.testOnReturn}" /> <property name="testWhileIdle" value="${dbcp.pg.testWhileIdle}" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 事务管理器 ** 是默认的 transactionManager ** --> <bean id="psqlTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" name="transactionManager"> <property name="dataSource" ref="dataSource" /> <qualifier value="psqlTX"/> </bean> <!-- for psqlTransactionManager 的事务描述 --> <tx:advice id="psqlTxAdvice" transaction-manager="psqlTransactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <!-- mybatis SqlSessionFactoryBean 工厂 --> <bean id="psqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatisConfig.xml"></property> <property name="dataSource" ref="dataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chanjet.chanapp.bizpubsvc.mapper.psql" /> <property name="sqlSessionFactoryBeanName" value="psqlSessionFactory"/> </bean> <!-- pgSQL end --> <!-- mappers --> <!-- 商务系统 数据源定义 biz(商务库主库) 1, 数据源 2, 事务管理器 3, sql Session 工程 4, maper 文件扫描 装配等 --> <!-- 数据源 --> <bean id="bizMasterDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- Connection Info --> <property name="driverClassName" value="${dbcp.bizMaster.driver}" /> <property name="url" value="${dbcp.bizMaster.url}" /> <property name="username" value="${dbcp.bizMaster.username}" /> <property name="password" value="${dbcp.bizMaster.password}" /> <!-- Connection Pooling Info --> <property name="validationQuery" value="${dbcp.bizMaster.validationQuery}" /> <property name="initialSize" value="${dbcp.bizMaster.initialSize}" /> <property name="maxActive" value="${dbcp.bizMaster.maxActive}" /> <property name="minIdle" value="${dbcp.bizMaster.minIdle}" /> <property name="maxIdle" value="${dbcp.bizMaster.maxIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${dbcp.bizMaster.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${dbcp.bizMaster.minEvictableIdleTimeMillis}" /> <property name="numTestsPerEvictionRun" value="${dbcp.bizMaster.numTestsPerEvictionRun}" /> <property name="maxWait" value="${dbcp.bizMaster.maxWait}" /> <property name="removeAbandoned" value="${dbcp.bizMaster.removeAbandoned}" /> <property name="removeAbandonedTimeout" value="${dbcp.bizMaster.removeAbandonedTimeout}" /> <property name="testOnBorrow" value="${dbcp.bizMaster.testOnBorrow}" /> <property name="testOnReturn" value="${dbcp.bizMaster.testOnReturn}" /> <property name="testWhileIdle" value="${dbcp.bizMaster.testWhileIdle}" /> <property name="defaultAutoCommit" value="false" /> </bean> <!-- 事务管理器 --> <bean id="bizMasterTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="bizMasterDataSource" /> <qualifier value="bizMasterTX"/> </bean> <!-- for bizTransactionManager 的事务描述 --> <tx:advice id="bizMasterTxAdvice" transaction-manager="bizMasterTransactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" /> </tx:attributes> </tx:advice> <!-- mybatis SqlSessionFactoryBean 工厂 --> <bean id="bizMasterSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatisConfig.xml"></property> <property name="dataSource" ref="bizMasterDataSource" /> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.chanjet.chanapp.bizpubsvc.mapper.bizmaster" /> <property name="sqlSessionFactoryBeanName" value="bizMasterSessionFactory"/> </bean> <!-- biz end --> <!-- 开启事务注解驱动,默认的事务开在 psql 上 --> <tx:annotation-driven transaction-manager="psqlTransactionManager"/> </beans>
备注:
1)qualifier 为 bean 中引入事务管理器的名字
DAO(bean)中的引入事务管理器方式:
@Override @Transactional(value = "bizMasterTX", readOnly = true) public ActiveCodeDTO queryBizMasterActiveCode(String cardNo) throws Exception { return queryActiveCodeImpl(bizMasterActiveCodeMapper, cardNo); }