springboot事物管理@Transactional

看了一下springboot的事物办理,今天总结一下,记实一下利用的体例,很简单,一个简单的注解就可以搞心猿意马了, @Transactional

颠末测试发现:

(1)若是不加Transactional注解,则对数据库的操作会当即更新,之后若是抛出异常也不会回滚;申明,默认环境下,是没有事物的。

(2)若是加上Transactional注解,在数据库更新语句之后抛出RuntimeException,则会更新不当作功,申明,事物生效了。

(3)一个重点:当利用事物时,呈现了RuntimeException和Error时,则事物会回滚。checked exceptions不会回滚(因为java强制对会抛出checked exceptions的代码利用try catch;想回滚,可以在catch中抛出前面的异常和错误)

(4)下面经由过程源码简单的总结Transactional注解的默认设置装备摆设,及测试的过程。

东西/原料

  • Transactional
  • ecplise

方式/步调

  1. 1

    先看Transactional注解的源码

    (1)源码注释中说:当利用了此注解,碰到了RuntimeException和Error时会回滚。checked exceptions不会回滚。

  2. 2

    (2)按照Target属性可知,这个注解可以用于润色方式、类、接口(包罗注解)、列举类型;一般环境下,最好用到service层的方式上,一个营业一个事物。

  3. 3

    (3)默认的事物传布机制:REQUIRED。当前没有事物则开启一个新的事物;当前有事物则插手到这个已有的事物中。

  4. 4

    (4)只读事物Transactional(readOnly=true):其实一向质疑只读事务的感化(一向觉着没啥用),然后网上找了一下都说是因为,统一个营业中对一条数据多次查询时,有可能这多次查询的时候距离中该数据被其他用户点窜,导致前后查询到的数据纷歧致,想想很有事理;用只读事物就可以解决这个问题,包管数据的前后一致性。(若是想避免这个问题,也在代码中只读一次,避免多次读)。

  5. 5

    然后测试Transactional注解的感化:

    (1)不开启事物,在保留方式中抛出RuntimeException,发现可以保留数据。

  6. 6

    (2)开启事物,在保留方式中抛出RuntimeException,发现此时保留不了数据。

  • 发表于 2018-05-05 00:00
  • 阅读 ( 994 )
  • 分类:其他类型

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具