spring 的事务控制

来源:互联网 发布:php cas sso单点登录 编辑:程序博客网 时间:2024/05/16 09:03

    在spring开发过程中,我们用在类上打上@Transactional 标签来声明当前类是一个事务来控制的(当然也可以直接放在方法上)。

     因为有service间的互相调用,导致多个事务操作同一张表的情况,目前解决就是把方法移到同一service中处理。

    还有一个问题就是当service处理过程中报错,事物回滚不完全,也就是有的表没有回滚,而我们在开发中遇到uat环境的数据库极不稳定,就使问题暴露的更加明显。发生这种问题有两种情况:

           情况一:spring的@Transactional 标签在不配置的情况下,只有在遇到runtimeException才会回滚。

           解决办法:在标签后面配置所有Exception都回滚,即:@Transactional(rollbackFor=Exception.class)

           情况二:service中有些方法有try catch操作,就使错误被捕捉到,就不会抛出触发事务回滚。

           解决办法这里可以说是以后开发要注意的,service中不要有try catch操作,都放在controller里控制。

原创粉丝点击