1.简介

Spring为程序性和声明性事务提供支持。

1.1程序化交易

对于程序性事务,需要显式编写事务管理代码,以便在一切成功后提交,并在出现问题时回滚。 在这种情况下,事务管理代码与业务逻辑紧密绑定。

1.2声明式交易

声明式事务将事务管理代码与业务逻辑分开。 Spring通过Spring上下文中的XML配置或@Transactional注释,使用事务建议(使用AOP)来支持声明式事务。

在本教程中,我们将特别关注@Transactional批注及其工作方式。

2.实施

要在基于Spring的应用程序中开始使用@Transactional批注,我们需要先在Spring应用程序中启用批注,方法是将所需的配置添加到spring上下文文件中–

<tx:annotation-driven transaction-manager="txManager"/>

接下来是定义事务管理器Bean,其名称与上述transaction-manager属性值中指定的名称相同。

交易经理可能是–

2.1数据源交易管理器

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref= "datasource" />
</bean>

2.2休眠事务管理器

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref= "sessionFactory" />
</bean>

2.3 JPA交易管理器

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

现在,我们准备在类或方法级别使用@Transactional批注。

@Transactional(value = "myTransactionManager", propagation = Propagation.REQUIRED, readOnly = true)
public void myMethod() {...
}

3.相关链接

  • 将Hibernate与Spring MVC和Maven集成
  • Hibernate Framework简介

4.了解@Transactional批注

在较高的层次上,当一个类在其本身或其成员上声明@Transactional时,Spring将创建一个代理,该代理实现与您要注释的类相同的接口。 换句话说,Spring将Bean包装在代理中,而Bean本身对此一无所知。 代理为Spring提供了一种在方法调用之前,之后或周围将行为注入到被代理对象中的方式。

在内部,它与使用事务通知(使用AOP)相同,在代理中首先创建代理,然后在目标bean的方法之前/之后调用代理。

生成的代理对象提供了由Spring创建的TransactionInterceptor 。 因此,当从客户端代码调用@Transactional方法时,首先从代理对象调用TransactionInterceptor ,该代理对象开始事务并最终在目标bean上调用该方法。 调用完成后, TransactionInterceptor相应地提交/回滚事务。

注意,只有来自目标bean“外部”的调用才通过代理。

5.了解传播和只读注释属性

5.1交易只读

如果未将readOnly属性显式设置为true ,则将具有读/写事务。

显式地指定readOnly属性总是更好的选择,因为我们已经注意到,Hibernate大大改善了性能。

5.2交易传播

默认情况下,事务传播是必需的,这意味着同一事务将从事务调用方传播到事务被调用方。 它将创建一个新事务,或在可用的情况下重用该事务。 例如,如果只读事务调用读写事务方法,则整个事务将为只读。

根据事务传播属性(例如REQUIRES_NEW ),有时会在某个时候挂起/暂停现有事务,总是启动并最终提交新事务,然后恢复第一个事务。

5.3隔离度

隔离级别定义了事务之间的合同。

  • 读取未提交 –线程尚未提交事务且另一个线程正在读取脏数据时,允许进行脏读。
  • 已提交读 –不允许脏读。 仅允许线程读取另一个线程中其他正在运行的事务已提交的值。
  • 重复读取 –如果在同一事务中两次读取相同的数据,则它将始终相同。 此级别保证一旦读取就不会更改任何数据。
  • 可序列化 –事务在所有级别都处于锁定状态(读取,范围和写入锁定),因此,它们以固定的顺序执行。 它不允许并发事务并导致性能下降。

使用“可重复读取”隔离级别,从事务开始就维护数据库的状态。 如果您检索会话1的值,则在会话2更新值,在会话1再次检索它会返回相同的结果。

6.源代码下载

  • 下载源代码
  • 休眠性能调整

翻译自: https://www.javacodegeeks.com/2016/05/understanding-transactional-annotation-spring.html

在Spring中了解事务注释相关推荐

  1. Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  2. spring中的事务配置

    为什么80%的码农都做不了架构师?>>>    一 简介 spring中提供了三种事务管理的方法. 编程式事务管理 :亦即自己编写事务管理的代码,通过注入获取到spring中的事务管 ...

  3. Spring(四)——AOP、Spring实现AOP、Spring整合Mybatis、Spring中的事务管理

    文章目录 1. 什么是AOP 2. 使用Spring实现AOP 2.1 使用Spring的API 接口实现 2.2 自定义实现 2.3 使用注解实现 3. 整合MyBatis 3.1 MyBatis- ...

  4. spring中aop事务

    文章目录 事务 为什要用到Spring中AOP事务 事物的特性 ACID 事务并发问题 事务的隔离级别 spring事务管理 事务操作 事务操作对象 spring管理事务的属性介绍 spring管理事 ...

  5. Spring中解决事务以及异步注解失效

    Spring中解决事务以及异步注解失效 一.重现@Transaction失效的场景 有如下业务场景,新增订单后,自动发送短信,下面的代码在同一个类中: @Transaction public void ...

  6. Spring中的事务回滚 网上比较不错的文章

    1 浅谈Spring中的事务回滚 https://www.cnblogs.com/zeng1994/p/8257763.html 2 spring 事务回滚 https://www.cnblogs.c ...

  7. spring事务管理器的作用_【面试必问】Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  8. (转)Spring中的事务操作

    http://blog.csdn.net/yerenyuan_pku/article/details/70024364 事务的回顾 什么是事务 事务是逻辑上的一组操作,组成这组操作的各个逻辑单元,要么 ...

  9. 基于Spring中的事务管理机制

    什么是事务? 通俗理解,事务其实就是一系列指令的集合. 为什么要使用事务管理? 我们在实际业务场景中,经常会遇到数据频繁修改读取的问题.在同一时刻,不同的业务逻辑对同一个表数据进行修改,这种冲突很可能 ...

最新文章

  1. 分布式存储fastdfs安装使用
  2. Appian宣布将Google AI 集成到RPA中
  3. go语言触发异常的场景
  4. 大厂测试开发常见面试题收集(python,java,性能等)
  5. 总结一些最优化算法(ADMM/FISTA)代码网站
  6. 运用Axure6.5快速完成微信交互效果的简单办法
  7. playframe 项目搭建
  8. cdoj 1252 24点游戏 dfs
  9. android中的 listview控件,聊聊Android中的ListView控件
  10. iOS 14.5 目前已經發布了8 個測試版更新
  11. 我的世界服务器物品管理,我的世界NEI物品管理器mod详细图文使用教程
  12. linux怎么查找bin文件内容,[转载]Linux 文件、内容查找(递归) ,grep ,find
  13. otsu算法详细推导、实现及Multi Level OTSU算法实现
  14. Minimum Flips to Make a OR b Equal to c(C++ 或运算的最小翻转次数)
  15. Padavan编译技巧
  16. Netty总结(面试须知)
  17. bzoj4444: [Scoi2015]国旗计划(线段树+倍增)
  18. Go 高性能编程心法探秘
  19. 网站使用CDN加速的5个优势
  20. 计算机网络之在浏览器输入“www.xxx.com”后都发生了什么?

热门文章

  1. 14-多对多关系建表
  2. v-for指令案例详解
  3. publiccms实现多层级选项卡效果
  4. C#实现人脸识别【SqlHelper】
  5. ubuntu 16.4 安装postgreSQL,使C++链接到数据库
  6. 可以代表学计算机的标志,桌面上的图标可以用来表示
  7. admiration音标是什么_英语admiration的意思解释|读音发音|相关词语_英语词典_词林在线词典...
  8. 学生用计算机说明方法,15.文中多处运用了作比较的说明方法.请任选一例.说说运用这种方法的作用. 例子: 作用:...
  9. linux下kill指令默认信号,Linux基础命令之kill命令
  10. android通讯录增删改查,android 通话记录的增删改查 .