事务注解详解

关注我,每天三分钟,带你轻松掌握一个Java相关知识点。

spring实现事务的方式有两种,编程式和声明式。

编程式是指在写业务代码中将事务代码也写进去,这是很古老的做法了,在现在看起来可能不可思议。

在spring一统天下后,aop的思想深入人心,声明式实现事务也为广大程序员使用。我们今天讲的@Transaction就是声明式事务的一种实现方式。

在之前的文章中,我们聊过了事务的ACID、事务的传播特性以及事务的隔离级别,其实这些都是事务需要关注的一个面,那么事务究竟有几个方面需要我们掌握呢?

这里需要注明一下,也有人把回滚规则不作为事务属性,其实怎么理解无所谓,这都是为了对事务有一个全面的了解。

那么我们没有说过的回滚规则、是否只读和超时时间是干什么的呢?

回滚规则:默认情况下只有未检查异常(RuntimeException和Error类型的异常)会导致事务回滚. 而受检查异常不会。

事务的回滚规则可以通过@Transactional 注解的 rollbackFor 和 noRollbackFor 属性来定义。这两个属性被声明为 Class[] 类型的, 因此可以为这两个属性指定多个异常类。

是否只读:在类和方法上标注,表明该类下所有方法或者该方法只是查询,不会涉及到修改、增加和删除,因为事务对于数据库来说,是笔不小的开支,数据库引擎针对只读事务能做优化来提高性能。

超时时间:事务本质是在数据库中获得锁,但是如果让它无限的霸占资源,很可能会导致性能问题,超时时间就是规定该事务在回滚之前能占用资源多久。

@Transactional 注解可以加载类上,也可以加在方法上,如果加在类上,则表用这个方法中所有的public类都有事务,而方法上则事务只针对这个方法。

注意,这个注解只对public方法有效。

在javaweb开发中,我们一般将事务注解放到service层。

以上就是今天的知识点,各位小伙伴get到吗?创作不易,望各位多多点赞收藏,有什么建议可以留言告诉我,我会积极采纳!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190706A06E5200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券