Spring中的事务控制
时间:2019-11-06
本文章向大家介绍Spring中的事务控制,主要包括Spring中的事务控制使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 Spring事务控制我们要明确的
- ①JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案。
- ②Spring框架为我们提供了一组事务控制的接口。这组接口在spring-tx-5.0.2.RELEASE.jar中。
- ③Spring的事务控制都是基于AOP的,它既可以使用编程的方式实现,也可以使用配置的方式实现。
2 Spring中事务控制的API的介绍
2.1 PlatformTransactionManager
- 此接口是Spring的事务控制器,它里面提供了我们常用的操作事务的方法,如下所示:
package org.springframework.transaction; import org.springframework.lang.Nullable; public interface PlatformTransactionManager extends TransactionManager { /** * 获取事务状态信息 */ TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException; /** * 提交事务 */ void commit(TransactionStatus status) throws TransactionException; /** * 回滚事务 */ void rollback(TransactionStatus status) throws TransactionException; }
- 我们开发中都是使用它的实现类,如下图所示:
2.2 TransactionDefinition
- 它是事务的定义信息对象,里面有如下的方法:
package org.springframework.transaction; import org.springframework.lang.Nullable; public interface TransactionDefinition { int PROPAGATION_REQUIRED = 0; int PROPAGATION_SUPPORTS = 1; int PROPAGATION_MANDATORY = 2; int PROPAGATION_REQUIRES_NEW = 3; int PROPAGATION_NOT_SUPPORTED = 4; int PROPAGATION_NEVER = 5; int PROPAGATION_NESTED = 6; int ISOLATION_DEFAULT = -1; int ISOLATION_READ_UNCOMMITTED = 1; int ISOLATION_READ_COMMITTED = 2; int ISOLATION_REPEATABLE_READ = 4; int ISOLATION_SERIALIZABLE = 8; int TIMEOUT_DEFAULT = -1; /** * 获取事务的传播行为 */ default int getPropagationBehavior() { return PROPAGATION_REQUIRED; } /** * 获取事务的隔离级别 */ default int getIsolationLevel() { return ISOLATION_DEFAULT; } /** * 获取事务超时时间 */ default int getTimeout() { return TIMEOUT_DEFAULT; } /** * 获取事务是否只读 */ default boolean isReadOnly() { return false; } /** * 获取事务对象的名称 */ @Nullable default String getName() { return null; } static TransactionDefinition withDefaults() { return StaticTransactionDefinition.INSTANCE; } }
2.2.1 事务的隔离级别
- 事务的隔离级别反映事务提交并发访问时的处理态度。
- ISOLATION_DEFAULT:默认级别。使用时底层数据库的事务隔离级别。
- ISOLATION_READ_UNCOMMITTED:读未提交。
- ISOLATION_READ_COMMITTED:读已提交。解决了脏读问题。
- ISOLATION_REPEATABLE_READ:可重复读。解决了脏读、不可重复读问题。
- ISOLATION_SERIALIZABLE :序列化。解决了脏读、不可重复读和幻读的问题。
2.2.2 事务的传播行为
- PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般选择这个(默认值)。
- PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)。
- PROPAGATION_MANDATORY :使用当前的事务,如果当前没有事务,就抛出异常。
- PROPAGATION_REQUIRES_NEW:新建事务,如果当前在事务中,把当前事务挂起。
- PROPAGATION_NOT_SUPPORTED :以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- PROPAGATION_NEVER :以非事务方式运行,如果当前存在事务,抛出异常。
- PROPAGATION_NESTED :如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行REQUIRED类似的操作。
2.2.3 超时时间
- 默认值是-1,表示没有时间限制。如果有,以秒为单位进行设置。
2.2.4 是否是只读事务
- 建议查询时设置为只读。
2.3 TransactionStatus
- 此接口提供的是事务具体的运行装填,方法如下:
package org.springframework.transaction; import java.io.Flushable; public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable { /** * 是否含有保存点 */ boolean hasSavepoint(); /** * 刷新事务 */ @Override void flush(); /** * 是否是新事务 */ boolean isNewTransaction(); /** * 设置事务回滚 */ void setRollbackOnly(); /** * 是否回滚 */ boolean isRollbackOnly(); /** * 事务是否完成 */ boolean isCompleted(); }
3 基于XML声明式事务控制
原文地址:https://www.cnblogs.com/xuweiweiwoaini/p/11808873.html
- 自动类型安全的.NET标准REST库refit
- 实现WebSocket和WAMP协议的开源库WampSharp
- Centos下部署DRBD+NFS+Keepalived高可用环境记录
- jQuery方法position()与offset()区别
- 温故而知新:设计模式之桥接模式(Bridge)
- 温故而知新:设计模式之装饰模式(Decorator)
- 域名“宝贝”baby.cn以71万元价格结拍
- 温故而知新:设计模式之组合模式(Composite)
- ruby学习笔记(7)-闭包
- ruby学习笔记(6)-Array的使用
- centos7下部署iptables环境纪录(关闭默认的firewalle)
- ruby学习笔记(5)-模块module的运用
- linux系统root密码遗忘的情况下的解决办法
- ruby学习笔记(4)-动态修改类的属性
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释