在进行spring事务控制问题时,经常会碰到将事务加载到 service层,至于为什么要加载到这一层却没有弄明白?
下面讲讲个人针对事务的理解:
1、spring什么时候会提交事务,什么时候会回滚事务。
spring事务处理时,会针对事务层事务层方法返回时进行检查,如果检查到有异常抛出,spring将回滚该事物,如果没有异常抛出将会提交事务。
2、事务加载到DAO层,针对系统的影响。
DAO层是针对数据库操作的一层,一般来说单独的DAO只会针对某个实例进行操作,如果事务加载到该层,可以保证针对该表的事务保持一致。
而一次业务处理一般会包含多个表的操作,可能会调用到多个DAO,如果其中某一个出错,将会影响到事务的一致性。
3、事务加载到view层,即action层。
针对事务的处理,如果在业务处理过程中,需要抛出异常(回滚事务),
如果在action层捕获异常,不再抛出异常的情况下,spring事务管理会认为该次处理过程中没有异常抛出,将会提交该事物,因此异常前的内容将会被提交,不能保证事务的一致性。
如果不捕获异常,将异常抛出,spring事务管理将会回滚该事物,针对系统数据不会有影响,但是会将界面直接抛到view层,影响界面展示。
因此,如果事务加载到action层,将无法对业务异常等处理。
以上内容仅个人理解,可能有出入,请各位大神指出本人理解是否正确。