事务处理是数据库系统中非常重要的一环,在使用Sping框架过程中,通过配置TransationManger即可完成对事物的管理,而其中的若干奥妙却说不清楚,在工作中遇到事务问题也很难搞定,本文参考文献中的第一篇《Java事务分析》对事务的分析由浅入深、循序渐进,讲述比较透彻,很佩服博主的细心和表述能力。在这篇博文中,我对自己学习过的Java事务问题进行总结。
本地事务
(1)本地(Local Transaction)事务指只有一个数据源参与的事务,比如只有数据库或者只有JMS;分布式事务(Distributed Transaction)指有多个数据源同时参与的事务,比如一项操作需要同时访问数据库和通过JMS发送消息,或者一项操作需要同时访问两个不同数据库。对于分布式事务,Java提供了JTA规范,它的原理与本地事务存在不同。
(2)之所以出现事务不一致,就是因为连接数据源的Connection对象不是一个, 为了使两个DAO在同一个事务中,我们应该在整个事务处理过程中使用一个Connection对象。
(3)事务设计的基本思路:
设计一个TransationManger用来管理Connection,保证一个事务只是用一个唯一的Connection;
将事务操作流程定义成一个模板方法,真正的业务留给子类去实现,实现了完整的事务和业务的部分分离;
更进一步,使用动态代理,在代理类上增加对事务的前后处理,这样事务和业务就真正地完全分开;
使用注解,把要加入事务控制的方法用注解标记出来,其余的不用无事务,更加灵活。
分布式事务
参考文献:
http://www.cnblogs.com/davenkin/archive/2013/02/16/java-tranaction-1.html Java事务分析
http://aixiangct.blog.163.com/blog/static/9152246120113251636706/ JDBC、JTA、Spring的事务管理
http://www.ibm.com/developerworks/cn/java/j-lo-jta/ JTA深度历险