1 本地事务,全局事务
本地事务:在单个 EIS 或数据库的本地并且限制在单个进程内的事务。本地事务不涉及多个数据来源
全局事务:资源管理器管理和协调的事务,可以跨越多个数据库和进程。资源管理器一般使用 XA 二阶段提交协议与“企业信息系统”(EIS) 或数据库进行交互
2 spring事务api
PlatformTransactionManager, TransactionDefinition, SavepointManager, TransactionStatus
(1) PlatformTransactionManager:事务管理平台,一个策略接口,不同的持久层框架使用不同的实现类来处理事务,例如:DataSourceTransactionManager, HibernateTransactionManager, JdoTransactionManager, JmsTransactionManager, JpaTransactionManager, JtaTransactionManager, TopLinkTransactionManager, WebLogicJtaTransactionManager,通过实现此接口,Spring可以管理任何实现了这些接口的事务,
此接口方法:
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; 根据事务的隔离级别和传播行为,返回当前活动的事务或者产生一个新的事务
void commit(TransactionStatus status) throws TransactionException;监视事务状态,并提交一个事务
void rollback(TransactionStatus status) throws TransactionException;回滚给定的事务
(2) TransactionDefinition: 这个接口的作用就是定义事务的名称、隔离级别、传播行为、超时时间长短、只读属性等
主要方法:
int getIsolationLevel()
返回事务的隔离级别。
String getName()
返回事务的名字。
int getPropagationBehavior()
返回事务的是传播行为。
int getTimeout()
返回事务的超时时间。
boolean isReadOnly()
返回是否(优化为)只读属性。
(3)SavepointManager:事务回滚点管理接口,提供创建、释放回滚点,或者回滚到指定的回滚点
Object createSavepoint()
Create a new savepoint.
创建一个新的回滚点。
void releaseSavepoint(Object savepoint)
Explicitly release the given savepoint.
释放一个给定的回滚点。
void rollbackToSavepoint(Object savepoint)
Roll back to the given savepoint.
回滚到给定的回滚点。
(4) TransactionStatus 这个接口的作用就是获取事务的状态(回滚点、是否完成、是否新事物、是否回滚)属性,还可以进行事务rollback-only的设置
boolean hasSavepoint()
判断这个事务是否有一个内在的回滚点(savepoint),即创建为基于回滚点的嵌套事务。
boolean isCompleted()
判断这个事务是否完成,也就是已经提交或者回滚。
boolean isNewTransaction()
判断一个事物是否为新事务,或者是这个事务参与到一个已经存在的事务里面。
boolean isRollbackOnly()
判断这个事务是否已经设置了rollback-only。
void setRollbackOnly()
设置这个事务rollback-only。
3 spring 事务传播特性
Required:必须有逻辑事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定,表示如果当前存在一个逻辑事务,则加入该逻辑事务,否则将新建一个逻辑事务
RequiresNew:创建新的逻辑事务,使用PROPAGATION_REQUIRES_NEW指定,表示每次都创建新的逻辑事务(物理事务也是不同的)
Supports:支持当前事务,使用PROPAGATION_SUPPORTS指定,指如果当前存在逻辑事务,就加入到该逻辑事务,如果当前没有逻辑事务,就以非事务方式执行
NotSupported:不支持事务,如果当前存在事务则暂停该事务,使用PROPAGATION_NOT_SUPPORTED指定,即以非事务方式执行,如果当前存在逻辑事务,就把当前事务暂停,以非事务方式执行
Mandatory:必须有事务,否则抛出异常,使用PROPAGATION_MANDATORY指定,使用当前事务执行,如果当前没有事务,则抛出异常(IllegalTransactionStateException)
Never:不支持事务,如果当前存在是事务则抛出异常,使用PROPAGATION_NEVER指定,即以非事务方式执行,如果当前存在事务,则抛出异常(IllegalTransactionStateException)
Nested:嵌套事务支持,使用PROPAGATION_NESTED指定,如果当前存在事务,则在嵌套事务内执行,如果当前不存在事务,则创建一个新的事务,嵌套事务使用数据库中的保存点来实现,即嵌套事务回滚不影响外部事务,但外部事务回滚将导致嵌套事务回滚
Nested和RequiresNew的区别:
1、 RequiresNew每次都创建新的独立的物理事务,而Nested只有一个物理事务;
2、 Nested嵌套事务回滚或提交不会导致外部事务回滚或提交,但外部事务回滚将导致嵌套事务回滚,而 RequiresNew由于都是全新的事务,所以之间是无关联的;
3、 Nested使用JDBC 3的保存点实现,即如果使用低版本驱动将导致不支持嵌套事务。
使用嵌套事务,必须确保具体事务管理器实现的nestedTransactionAllowed属性 为true,否则不支持嵌套事务,如DataSourceTransactionManager默认支持,而 HibernateTransactionManager默认不支持,需要我们来开启。
分享到:
相关推荐
8.4.5 Spring Data JPA 的事务支持 300 8.4.6 Spring Boot 的事务支持 302 8.4.7 实战 303 8.5 数据缓存Cache 309 8.5.1 Spring 缓存支持 309 8.5.2 Spring Boot 的支持 310 8.5.3 实战 312 8.5.4 切换缓存技术 319 ...
8.4.5 Spring Data JPA 的事务支持 300 8.4.6 Spring Boot 的事务支持 302 8.4.7 实战 303 8.5 数据缓存Cache 309 8.5.1 Spring 缓存支持 309 8.5.2 Spring Boot 的支持 310 8.5.3 实战 312 8.5.4 切换缓存技术 319 ...
8.4.5 Spring Data JPA 的事务支持 300 8.4.6 Spring Boot 的事务支持 302 8.4.7 实战 303 8.5 数据缓存Cache 309 8.5.1 Spring 缓存支持 309 8.5.2 Spring Boot 的支持 310 8.5.3 实战 312 8.5.4 切换缓存技术 319 ...
spring-boot-starter 阿里云RocketMQSpring图书版支持功能: 发送普通消息的三种模式:同步,异步和单向 订阅消息群集,广播 发送和接收顺序消息 交易讯息 延迟讯息 接收和接收定时消息定时消息和延迟消息: 延迟...
(Java Messaging Service)、甚至是 Spring。虽然有些复杂的企业应用运转良好,但大多数应 用都会时不时地遭受到无法解释的数据集成问题,比如不正确的账户结余、一个客户的多个 订单、系统“丢失”了订单、以及在...
Struts+Spring+Hibernate实现上传下载 本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本: •Struts 1.2 •Spring 1.2.5 •Hibernate 3.0 本文...
JMay是什么JMay是一款基于Spring、SpringMVC、Mybatis、Atomikos集成框架,用于快速搭建跨数据库、分布式事务(XA规范)支持的Java web项目.JMay有哪些功能1.基于spring,如沐春风的体验;2.扩展Mybatis-Generator,...
在Spring AOP中,切面通过常规类(基本模式方法)或者通过使用了注解@Aspect的常规类来实现。 连接点(Joint point):是指在程序执行期间的一个点,比如某个方法的执行或者是某个异常的处理。在Spring AOP中,一个...
Dubbo、Spring、SpringMVC、MyBatis、Druid、JDK7(或JDK8)、MySQL5.6、Tomcat 1、课程介绍 2、解决方案的效果演示(结合支付系统真实应用场景 3、常用的分布式事务解决方案介绍 4、消息发送一致性(可靠消息的...
大家常规的做法是采用springjdbc来实现原生SQL编写,但是也同样存在问题,SQL无法分离也没有逻辑标签能力。所以为了解决这个痛病,Jeecg针对springjdbc + freemarker做封装,出了这么一个轻量级永久层,可以让...
YouDBUtils这是一个“自用”的数据库工具包,你... 轻巧)IOC/DI/Transaction: 类似spring的控制反转,主要用于生成指定包下的DAO类的代理类(依赖cglib),让其具有事务特性,在ioc容器中以类名获取不忘底层: 提供CR
并且具备若干企业级的应用特性,如分库分表、JTA事务等。 代码生成插件for eclipse(请在eclipse中Help/Install new software后输入地址并安装)http://geequery.github.io/plugins/1.3.x/特点一 EF的设计的一个...
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...