Spring事务相关

@Transactional:

    •可设置的属性:

                •value|transactionManager:指定事务管理器。

                •propagation:指定该事物的传播属性,默认值是Propagation.REQUIRED。

                •isolation:指定事务隔离级别,默认值是Isolation.DEFAULT。

                •timeout:该事务的超时时间,默认值为-1,代表使用依赖的事务系统的默认超时时间。

                •readOnly:默认值为false,为true表示该事务只读。

                •rollbackFor|rollbackForClassName:指定0个或多个Throwable的子类,遇到这些异常必须回滚。默认是RuntimeException和Error及其子类。

                •noRollbackFor|noRollbackForClassName:指定0个或多个Throwable的子类,遇到这些异常不会滚。


传播属性介绍:

            •REQUIRES_NEW:创建一个新事务,如果之前有事务,挂起。

            •REQUIRED :之前有,就是用之前的;之前没有,创建新的。

            •SUPPORTS :支持在事务中运行。没有事务也无所谓。

            •NOT_SUPPORTED :不支持在事务中运行,如果之前有,挂起。

            •MANDATORY :必须在事务中运行,如果之前没有,抛异常。

            •NEVER :不能再事务中运行,如果之前有,抛异常。

            •NESTED :内嵌事务,如果之前没有事务,和REQUIRED 一样。内嵌事务和外部事务一起提交和回滚,内嵌事务也可以单独回滚。


示例总结:

        1. 默认情况下,只有RuntimeException和Error才会回滚。

        2. 同时指定rollbackFor和noRollbackFor时,从抛出类的继承关系和指定的rollbackFor和noRollbackFor做比较,从下往上,距离抛出类最近的获胜。如果没有找到,使用默认规则。

        3. 只读

            3.1 针对下面这种情况,如果在没有事务的方法调用这个方法时,会抛错:java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed


            3.2 如果是下面这种情况,又不会抛错


            3.3 而对于这种新创建一个事务指定了readOnly的,同样会抛错。


        4. 内嵌事务(Propagation.NESTED):内嵌事务和外部事务一起提交和回滚,内嵌事务也可以自己回滚。

内嵌自己回滚的示例:


        5. rollbackOnly:

            下面的示例是一个required的方法调用了另外一个required的方法,被调用的方法在执行DB操作之后,抛了异常。这种情况,第一个方法的操作也会被回滚。

异常:org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring 事务属性分析 事务管理对于企业应用而言至关重要。它保证了用户的每一次操作都是可靠的,即便出现了异常的...
    壹点零阅读 1,330评论 0 2
  • 很多人喜欢这篇文章,特此同步过来 由浅入深谈论spring事务 前言 这篇其实也要归纳到《常识》系列中,但这重点又...
    码农戏码阅读 4,775评论 2 59
  • 事务接口定义 在Spring中,事务是通过TransactionDefinition接口定义的。其中定义了访问事务...
    追梦人Plus阅读 1,171评论 0 12
  • 用成交易量捕捉强势股只需要坚持二点: 1 只选换手率巨大的股票 很多人买股不注意看换手率。换手率是成交量方面最重要...
    无涯看市阅读 495评论 0 0
  • 不懂自己是不是典型的天秤女,近期比较关注星座完全是想了解关于他的一切。
    咖啡咖事安小粟阅读 185评论 0 0