- 浏览: 569379 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
-
bo_hai:
快速排序:https://bo-hai.iteye.com/b ...
插入排序、选择排序、冒泡排序 简单实例 -
bo_hai:
参考:https://bo-hai.iteye.com/blo ...
插入排序、选择排序、冒泡排序 简单实例 -
bo_hai:
JDK1.8后,解决问题的办法就简单啦:List<Int ...
List 中去除 null 方法讨论 -
bo_hai:
上述两种办法都不是最好的单例模式。
安全发布单例模式 -
bo_hai:
我来评论一下。
MySql 删除重复数据的方法
1、我先要给大家讲一个概念:spring 的多数据源事务,这是民间的说法。官方的说法是:spring 的分布式事务。明白了这个概念,问题就好解决了。
2、分布式事务的应用场景:工程中使用两个及以上数据库中,就要考虑使用分布式事务管理,否则事务不能回滚。
3、现有两种开源的第三方jar支持spring的分布式事务管理,它们分别是:jotm和Atomikos。通过google可以找到下载的链接,其中atomikos的下载需要先填写email信息,再登录email找到链接去下载。下载地址分别:
2、http://www.atomikos.com/Main/InstallingTransactionsEssentials
我使用的是jotm。
4、基于spring+ibatis的环境下配置jotm的方法很简单。只城要修改spring数据源的配置及事务的配置及可。以下是我的配置,供参考。
<bean id="jotm" class="org.springframework.transaction.jta.JotmFactoryBean"> <property name="defaultTimeout" value="500000"/> </bean> <bean id="dataSource" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${driverClass}"/> <property name="url" value="${jdbcUrl}"/> </bean> </property> <property name="user" value="${user}"/> <property name="password" value="${password}"/> </bean> <bean id="dataSourceBbs" class="org.enhydra.jdbc.pool.StandardXAPoolDataSource" destroy-method="shutdown"> <property name="dataSource"> <bean class="org.enhydra.jdbc.standard.StandardXADataSource" destroy-method="shutdown"> <property name="transactionManager" ref="jotm"/> <property name="driverName" value="${bbs.driverClass}"/> <property name="url" value="${bbs.jdbcUrl}"/> </bean> </property> <property name="user" value="${bbs.user}"/> <property name="password" value="${bbs.password}"/> </bean> <!-- JTA事务管理器 --> <bean id="myJtaManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="userTransaction" ref="jotm" /> </bean> <!-- 事务切面配置 --> <aop:config> <aop:pointcut id="serviceOperation" expression="execution(* com.bohai.service.impl.*.*(..))"/> <aop:advisor pointcut-ref="serviceOperation" advice-ref="txAdvice" order="0" /> </aop:config> <!-- 通知配置 --> <tx:advice id="txAdvice" transaction-manager="myJtaManager"> <tx:attributes> <tx:method name="delete*" propagation="REQUIRED" /> <tx:method name="save*" propagation="REQUIRED" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="*" propagation="REQUIRED" /> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> <tx:method name="fetch*" propagation="SUPPORTS" read-only="true"/> <tx:method name="*_noTrans" propagation="NOT_SUPPORTED"/> </tx:attributes> </tx:advice>
5、jtom 还需要一个配置文件 carol.properties ,内容是:
# do not use CAROL JNDI wrapper carol.start.jndi=false # do not start a name server carol.start.ns=false # Naming Factory carol.jndi.java.naming.factory.url.pkgs=org.apache.naming
文件放在classpath下面,也就是src下面。
6、需要jtom的以下jar:
7、经过测试,配置是成功的。事务可以回滚。
评论
7 楼
呵呵6666
2016-11-28
6 楼
liuxiaolu
2015-01-13
楼主,你好,我按照你这样配置,事务没有控制成功,ibaties的配置是<bean id="sqlMapClient_pxA" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap/sqlmap-config.xml" />
<property name = "dataSource" ref="dataSourceA"/>
</bean>
<bean id="sqlMapClient_pxB" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap/sqlmap-config.xml" />
<property name = "dataSource" ref="dataSourceB"/>
</bean>
<bean id="sqlMapClientTemplateA" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient">
<ref bean="sqlMapClient_pxA" />
</property>
</bean>
<bean id="sqlMapClientTemplateB" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient">
<ref bean="sqlMapClient_pxB" />
</property>
</bean>
<property name="configLocation" value="classpath:sqlmap/sqlmap-config.xml" />
<property name = "dataSource" ref="dataSourceA"/>
</bean>
<bean id="sqlMapClient_pxB" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sqlmap/sqlmap-config.xml" />
<property name = "dataSource" ref="dataSourceB"/>
</bean>
<bean id="sqlMapClientTemplateA" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient">
<ref bean="sqlMapClient_pxA" />
</property>
</bean>
<bean id="sqlMapClientTemplateB" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
<property name="sqlMapClient">
<ref bean="sqlMapClient_pxB" />
</property>
</bean>
5 楼
bo_hai
2014-11-23
今天再来复习了一下Spring分布式事务管理,发现了一个可能管理更好的JTA的第三方开源JAR:BTM。参考资料:http://docs.codehaus.org/display/BTM/Spring+Framework
4 楼
bo_hai
2012-12-18
3 楼
bo_hai
2012-12-18
http://mengqingyu.iteye.com/blog/571388
这个blog讲更详细。
这个blog讲更详细。
2 楼
bo_hai
2012-12-17
chenxiang105 写道

具体是个什么场景? 我们现在项目很大, 有快2000个表了, 但是数据源依然是一个.. 并发压力也较大..
可以把2000个分别放到不同的数据库中,这样减轻了数据库的压力。当在工程中要使用多个数据库时,就要使用多数据源。
1 楼
chenxiang105
2012-12-17

具体是个什么场景? 我们现在项目很大, 有快2000个表了, 但是数据源依然是一个.. 并发压力也较大..
发表评论
-
nginx 配置 CORS 支持跨域访问
2014-11-11 20:26 11623CSS代码设置了一些字体,如果跨域访问这些字体,就会加载失败 ... -
lockInterruptibly 和lock的区别
2014-09-03 11:04 3299这是个被无数人写过并还会被其他人继续写下去的blog。 代 ... -
Spring MVC 的单元测试实例
2014-08-15 16:48 897一、先定义实例: public class BaseTes ... -
HTTPClient 简单使用
2014-08-15 13:47 1119HttpClient 的用模拟http请求的工具,一般用在 ... -
tomcat 配置虚拟主机实例
2014-07-29 14:20 1534一、先来解释一下虚拟主机的概念:在一个tomcat上放多个工 ... -
Eclipse3.6 安装EGit
2014-07-08 21:56 635Eclipse3.6 安装EGit地址是 http://do ... -
ThreadPoolExecutor 中饱和策略分析
2014-07-03 15:25 2297import java.util.concurrent.Ti ... -
FutureTask 实例
2014-06-29 10:56 676先来总结一下FutureTask使用场景: 如果不想分支线 ... -
ReadWriteLock 使用实例
2014-06-28 20:21 911首先来讨论ReadWriteLock 类的使用场景,记住一句 ... -
安全发布单例模式
2014-06-27 17:24 7031、最简单的方法: public class Singl ... -
JAVA notifyAll wait 实例
2014-06-27 13:55 539两个线程,分别有两数据结构:1到10的数据和A到E的字符。 ... -
获取机器CPU数量的方法
2014-06-22 15:58 676public class CPUNum { /** ... -
动态代理的实现
2014-06-17 21:26 526public interface IHelloWorld ... -
线程同步优化实例
2014-06-11 17:56 554代码如下: package com.bohai.thre ... -
JavaScript 遍历JSON 获取key value
2014-04-30 16:20 672if (!$.isEmptyObject(subProdIn ... -
计算器算法(支持加减乘除括号)
2014-04-19 17:53 5636import java.util.ArrayList; i ... -
实用工具类 && CollectionUtils
2014-04-19 13:53 7894import java.util.ArrayList; ... -
解决fatal: unable to connect to github.com问题
2014-04-08 16:43 2230问题: 在使用Aptana Studio3 ... -
JAVA多线程 Semaphore 应用
2014-01-24 16:04 558import java.util.concurrent.Ex ... -
JAVA多线程 Exchanger 应用
2014-01-24 15:42 719import java.util.concurrent.Ex ...
相关推荐
- 在Spring的配置文件中,配置JDBC数据源,这里需要为每个数据库配置一个数据源。 - 配置JOTM事务管理器,通过`UserTransaction`接口进行事务的开始、提交和回滚。 - 使用`PlatformTransactionManager`接口配置...
如果你的服务器支持JNDI,那么需要在服务器配置文件中添加相应的数据源定义,并确保与Spring中的配置一致。 3. 编译和部署:根据你的开发环境,可能需要编译项目(如使用Maven或Gradle),然后将生成的WAR文件部署...
在这个数据同步程序中,Spring可能被用来管理Bean,实现事务控制,以及与iBatis的集成。 3. **iBatis**:iBatis是一个SQL映射框架,它将SQL语句与Java代码分离,提高了数据库操作的灵活性和可维护性。在这个例子中...
2. **配置SpringMVC**:在SpringMVC的配置文件中,定义数据源,将数据源指向Mycat服务器。同时,配置Servlet容器如Tomcat,以启动SpringMVC应用。 3. **配置iBatis**:创建SqlSessionFactoryBean,指定配置文件的...
在使用JTA时,你需要确保MyBatis的数据源配置为JNDI数据源,以便于事务的统一管理。 总的来说,Spring配置JTA事务管理是一项关键任务,它确保了在分布式环境下的数据一致性。理解并正确配置JTA事务管理,能够让你的...
因为不同的数据源可能需要不同的事务隔离级别和回滚规则,所以我们需要配置多个PlatformTransactionManager,并根据数据源路由结果选择合适的事务管理器。 6. **注解驱动的多数据源选择** 为了方便在代码中切换...
4. **事务管理**:在Spring的事务配置中,确保事务管理器能够识别并处理多数据源的事务,这通常需要设置AbstractRoutingDataSource作为事务管理器的数据源。 5. **业务逻辑代码**:在业务逻辑代码中,通过某种方式...
在Hibernate中,JTA事务应用总结通常会讲解如何配置Hibernate以使用JTA,以及在多数据源环境下如何处理事务。 跨库事务处理,如在spring+hibernate+struts2+jta的项目中,需要考虑的细节更多,包括异常处理、回滚...
- **基于JTA的事务管理机制**:适用于分布式事务场景,适用于跨多个数据源的事务处理。 - **外部事务管理**:允许使用应用服务器提供的事务管理服务,如Spring的PlatformTransactionManager。 ### 缓存 Ibatis...
- **ibatis配置**:通过XML配置文件或注解来配置ibatis,主要包括数据源配置、映射文件路径配置等。 - **ibatis基础语义** - **XmlSqlMapClientBuilder**:这是一个工具类,用于从XML配置文件构建`SqlMapClient`...
2. 配置SqlMapConfig.xml:这是Ibatis的核心配置文件,用于定义数据源、事务管理器、SqlMap等。 3. 编写Mapper XML文件:在XML文件中编写SQL语句和结果映射。 4. 创建Mapper接口:在Java代码中创建与XML文件对应的...
- **ibatis配置**:通过`SqlMapConfig.xml`配置文件设置数据源、事务管理器等全局配置。 - **SqlMapClient基本操作示例**:包括增删改查等基本CRUD操作。 #### 四、ibatis高级特性 - **数据关联**:描述了一对多和...
- **基于JTA的事务管理机制**:适用于分布式事务场景,支持多个数据源的事务协调。 - **外部事务管理**:当应用服务器或其他容器已经提供了事务管理服务时,ibatis可以与之集成,无需自己管理事务。 #### 四、...
iBatis允许开发者配置多个数据源,这在处理分布式数据库或读写分离的场景中非常有用。通过配置数据源,iBatis可以在运行时选择合适的数据库进行操作。 8. 性能优化: iBatis的性能优化主要体现在减少不必要的对象...
Spring的`DataSourceTransactionManager`是事务管理器,负责处理基于数据源的事务管理,它与Spring的事务管理策略密切相关。 Spring 提供了两种事务管理方式:编程式和声明式。编程式事务管理需要开发者在代码中...
8. 数据源:iBATIS允许开发者配置多种数据源,如单数据库、多数据库或分布式数据库,以适应不同规模和复杂性的应用需求。 在实际使用iBATIS时,开发者通常需要完成以下步骤: 1. 创建SQL Maps XML文件,定义SQL语句...
- **基于 JTA 的事务管理机制**:用于分布式事务处理,尤其是在涉及多个数据源的情况下。 - **外部事务管理**:当 iBATIS 作为更大框架的一部分时,可以通过外部事务管理器(如 Spring)来管理事务。 - **缓存机制*...
Ibatis的配置文件是整个框架的灵魂,它包含了数据源、事务管理器以及SQL映射文件的路径等信息。SqlMapClient配置后,我们可以通过SqlMapClientBuilder来实例化SqlMapClient对象。SqlMapClient提供了执行SQL映射文件...
- DataSourceTransactionManager:适用于基于JDBC的数据源事务管理,适用于Spring JDBC、iBATIS、MyBatis等。 - JdoTransactionManager:用于JDO(Java Data Objects)框架的事务管理。 - JpaTransactionManager:...
在开发大型分布式系统时,多数据源切换功能是一项重要的需求,它允许应用程序根据业务逻辑选择不同的数据库进行操作。Spring 和 Mybatis 结合使用可以很好地实现这一功能,通过动态数据源路由,我们可以灵活地在多个...