如何解决好事务处理

因开发的需要,有时候发现事务这块非常难处理,不知道到那位高手能够指点一下,如何将事务处理好,我对这一块非常的不懂。

针对项目的代码的话,事务处理,我个人遇到过两种情况,也就是两种解决方案,一种就是通过框架提供的方法来解决,比如说,spring里面管理事务,那你就配置好相关的配置文件,按照规则起方法的名字,也就是在你的业务层里面所要用的方法的名字,像findXXX(),等等,当spring监听到以find打头的方法的时候,就会触发事务管理。
另一种方法,就是自己控制,那你就在你自己认为是一个事务的开头加上有关事务的代码,先让事务自动为false,然后让事务开始,最后commit,这个你可以查查api就知道了。
其实事务就是一个完整的过程,如果这个过程中有一步没有成功的话就是没有成功,相当于这样——step1 && step2 && step3&&......
事务难的地方就是怕死锁,这个问题我就很难回答了,功力不够。希望对楼主有用。

我们现在基本上不使用事务,通过后续监控实现事务的补偿机制。
可能你现在只是一台DB,如果以后DB分布式,那事务就太浪费资源了。
可以参考:

http://www.dbanotes.net/arch/cap.html

一般来说,处理事物的方式有两种方式

第一:是编程式事物,也就是我们自己写代码来处理程序。此时如果你的持久化的方案用的是JDBC的话,可以通过设置connection对象的自动提交为false,完成业务逻辑代码后,我们手工提交事物,通过connection的commit()方法,如果期间抛出了异常,那么在catch语句块中将事物回滚。如果持久化方案你用到了框架,比如现在很流行的hibernate,因为hibernate默认情况下事物是非自动提交的,所以你应该在需要事物处理的代码前手动开启事物,通过session.beginTransaction()方法来开启。最后通过session.getTransaction().commit()方法来提交事物,如果抛出异常,则在catch语句块中通过session.getTransaction().rollback()来回滚。

第二:是声明式事物,这是需要使用框架,现在最流行的是spring,通过在spring中作出响应的配置就可以了。具体的配置在google上可以搜索。

如果写代码的经验还不是很足的话,介意先采用编程式事物,等熟悉了然后再去学习框架的使用。因为框架会给你隐藏很多比较底层的东西,不便于你的学习。