Spring中事务控制的示例分析

发布时间:2021-07-24 10:12:10 作者:小新
来源:亿速云 阅读:96

这篇文章主要介绍Spring中事务控制的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1.事务的概念

事务是一组操作的执行单元,相对于数据库的单条操作而言,事务管理的是一组SQL指令,如增删改查等,事务的特性体现在事务内包含的SQL指令必须全部执行成功,如果其中一条指令发生错误,那么整个事务内的一组操作都要进行回滚。

事务有四个特性:

2.Spring中的事务控制方式

编程式事务管理

通过手动编码控制事务的边界,可以实现细粒度的事务控制,一般用的较少。

声明式事务管理

只需要在Spring中添加一些配置文件或者使用注解,即可实现将操作纳入事务管理中,事务管理使用了Spring AOP,降低了代码之间的耦合。

3.事务管理器

Spring中并没有直接管理事务,而是将管理事务委托给相应的持久化机制提供的某个特定平台的实现。

事务管理器实现目标
org.springframework.jdbc.datasource.DataSourceTransactionManager在单一的JDBC Datasource中管理事务
org.springframework.orm.hibernate5.HibernateTransactionManager当持久化机制是hibernate时,用它来管理事务
org.springframework.jdo.JdoTransactionManager当持久化机制是Jdo时,用它来管理事务
org.springframework.transaction.jta.JtaTransactionManager使用一个JTA实现来管理事务。在一个事务跨越多个资源时必须使用
org.springframework.orm.ojb.PersistenceBrokerTransactionManager当apache的ojb用作持久化机制时,用它来管理事务

4.事务属性简介

Spring关于事务的注解中有以下几个属性(部分)

@Transactional(
readOnly = false, //读写事务
timeout = -1, //超时
noRollbackFor = ArithmeticException.class //遇到数学异常不回滚
isolation = Isolation.REPEATABLE_READ, //事务隔离级别
propagation = Propagation.REQUIRED //事务传播规则
)

5.事务传播规则

传播行为意义
REQUIRED业务方法需要在一个事务中运行。如果方法运行时,已经处在一个事务中,那么加入到该事务,否则为自己创建一个新的事务
NOT_SUPPORTED声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行
REQUIRES_NEW属性表明不管是否存在事务,业务方法总会为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务会被挂起,新的事务会被创建,直到方法执行结束,新事务才算结束,原先的事务才会恢复执行
MANDATORY该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果业务方法在没有事务的环境下调用,容器就会抛出异常
SUPPORTS这一事务属性表明,如果业务方法在某个事务范围内被调用,则方法成为该事务的一部分。如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行
NEVER指定业务方法绝对不能在事务范围内执行。如果业务方法在某个事务中执行,容器会抛出异常,只有业务方法没有关联到任何事务,才能正常执行
NESTED如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按REQUIRED属性执行.它使用了一个单独的事务, 这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效

6.事务隔离级别

隔离级别意义
DEFAULT默认的隔离级别
READ_UNCOMMITED允许你读取还未提交的改变了的数据。可能导致脏、幻、不可重复读
READ_COMMITTED允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生
REPEATABLE_READ对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生
SERIALIZABLE完全服从事务ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的

以上是“Spring中事务控制的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. Spring中StringUtils的示例分析
  2. Spring中关于Null的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring

上一篇:ASP.NET Eval如何进行数据绑定

下一篇:怎么调用C#的WebService

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》