spring+mybatis管理多个数据源(非分布式事务)

本文介绍了一个使用Spring和MyBatis管理两个独立数据源的demo,通过两个事务管理器分别管理两个数据源,实现了互不干涉的事务处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://www.cnblogs.com/rain-in-sun/p/4314283.html?utm_source=tuicool&utm_medium=referral


本文通过一个demo,介绍如何使用spring+mybatis管理多个数据源,注意,本文的事务管理并非之前博文介绍的分布式事务。

这个demo将使用两个事务管理器分别管理两个数据源。对于每一个独立的事务,只涉及一个数据源。

demo功能:实现一个能依靠两个独立的事务管理器互不干涉的管理自己的数据源的web demo。

demo将实现:

1.独立地控制两个不同的数据源的事务管理器。

 

测试方式:restful web api

 

使用工具:

spring 4.1.1.RELEASE

mybatis 3.2.7

tomcat 7

 

在mysql中建立两个schema,分别为dev和qa。并在里面分别建立一张名字表。

schema:dev

table:namaDev

id | nameDev

 

scheme:qa

table:nameQa

id  |  nameQa

对应的sql为

  create sql

代码分析:

本项目使用spring框架,因此首先配置相关bean

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3        xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
 4        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
 5        xmlns:rabbit="http://www.springframework.org/schema/rabbit"
 6        xmlns:cache="http://www.springframework.org/schema/cache" xmlns:task="http://www.springframework.org/schema/task"
 7        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
 8        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
 9     <context:component-scan base-package="com.xy">
10         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
11     </context:component-scan>
12     <context:property-placeholder location="classpath:context/database.properties"/>
13     <tx:annotation-driven/>
14 
15     <bean id="qadataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
16                  destroy-method="close">
17         <property name="jdbcUrl" value="${qa.db.url}"></property>
18         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
19         <property name="user" value="${qa.db.user}"></property>
20         <property name="password" value="${qa.db.password}"></property>
21         <property name="maxPoolSize" value="20"></property>
22         <property name="minPoolSize" value="20"></property>
23         <property name="initialPoolSize" value="20"></property>
24         <property name="maxIdleTime" value="200"></property>
25         <!--<property name="numHelperThreads" value="50"></property>-->
26     </bean>
27 
28     <bean id="devdataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
29           destroy-method="close">
30         <property name="jdbcUrl" value="${dev.db.url}"></property>
31         <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
32         <property name="user" value="${dev.db.user}"></property>
33         <property name="password" value="${dev.db.password}"></property>
34         <property name="maxPoolSize" value="20"></property>
35         <property name="minPoolSize" value="20"></property>
36         <property name="initialPoolSize" value="20"></property>
37         <property name="maxIdleTime" value="200"></property>
38         <!--<property name="numHelperThreads" value="50"></property>-->
39     </bean>
40 
41 
42 
43 
44 
45     <bean id="qasqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
46         <property name="dataSource" ref="qadataSource" />
47         <!--<property name="mapperLocations" value="classpath*:mapper/**/*.xml" />-->
48     </bean>
49 
50     <bean id="devsqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
51         <property name="dataSource" ref="devdataSource" />
52         <!--<property name="mapperLocations" value="classpath*:mapper/**/*.xml" />-->
53     </bean>
54 
55     <bean id="qaManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
56         <property name="dataSource" ref="qadataSource" />
57     </bean>
58 
59     <bean id="devManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
60         <property name="dataSource" ref="devdataSource" />
61     </bean>
62 
63 
64 
65     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
66         <property name="basePackage" value="com.xy.dao"/>
67         <property name="sqlSessionFactoryBeanName" value="qasqlSessionFactory" />
68     </bean>
69 
70     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
71         <property name="basePackage" value="com.xy.daodev"/>
72         <property name="sqlSessionFactoryBeanName" value="devsqlSessionFactory" />
73     </bean>
74 
75 
76 </beans>
复制代码

其中qadataSource和devdataSource是对应两个数据库的数据源,qasqlSessionFactory和devsqlSessionFactory是mybatis的sessionfactory,两个MapperScannerConfigurer自动将不同数据源的sql语句文件与interface自动装配起来。qaManager与devManage分别管理qadataSource和devdataSource的事务,互不干涉。

Model类如下:package com.xy.model

  NameDev
  NameQa

qa数据源的mybatis mapper接口 package com.xy.dao

  NameQaMapper

dev数据源的mybatis mapper接口 package com.xy.devdao

  NameDevMapper

处理事务的service

  NameService

controller代码

  controller

将项目打成war包,命名为mybatis.war部署在tomcat上。

测试:

1.POST  http://localhost:8080/mybatis/addName.json

request parameters:
withDevException=false
witQaException=false
返回:true 两个数据都添加成功

2.POST  http://localhost:8080/mybatis/addName.json

request parameters:
withDevException=false
witQaException=true
返回:true 只有dev添加成功
源码下载:http://files.cnblogs.com/files/rain-in-sun/springmvc-mybatis-multidatasource.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值