前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 事务管理API分析

Spring 事务管理API分析

作者头像
码农架构
发布2020-10-29 14:43:42
6180
发布2020-10-29 14:43:42
举报
文章被收录于专栏:码农架构

结合上篇 Spring 事务(Transaction) 简单描述,Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略。

Spring事务管理涉及的接口的联系如下

TransactionDefinition

PlatformTransactionManager

TransactionStatus

PlatformTransactionManager

事务Spring所有事务代理类都是基于PlatformTransactionManager接口的实现。

此接口是spring的事务管理器,它里面提供了我们常用的操作事务的方法,如下代码片段

代码语言:javascript
复制
//获得事务信息
TransactionStatus getTransaction(TransactionDefinition definition) 
//提交事务
void commit(TransactionStatus status) 
//回滚事务
void rollback(TransactionStatus status)

我们在开发中都是使用它的实现类,如下:

代码语言:javascript
复制
//用于Spring JDBC以及Mybatis框架的事务代理
DataSourceTransactionManager
//用于Hibernate框架事务代理
HibernateTransactionManager
//用于Jpa框架的事务代理
JpaTransactionManager
//用于JDO框架的事务代码
JdoTransactionManager
//用于Jta事务代理,一个事务跨多资源必须要使用
JtaTransactionManager

TransactionDefinition

TransactionDefinition是事务定义接口,该接口注意定义了:事务的传播行为,事务的隔离级别,获得事务信息的方法。所以在配置事务的传播行为,事务的隔离级别已经需要获得事务信息时,可以通过查阅该类的代码获得相关信息

代码语言:javascript
复制
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 = Connection.TRANSACTION_READ_UNCOMMITTED;
    int ISOLATION_READ_COMMITTED = Connection.TRANSACTION_READ_COMMITTED;
    int ISOLATION_REPEATABLE_READ = Connection.TRANSACTION_REPEATABLE_READ;
    int ISOLATION_SERIALIZABLE = Connection.TRANSACTION_SERIALIZABLE;
    int TIMEOUT_DEFAULT = -1;
    //获得事务信息
    int getPropagationBehavior();
    int getIsolationLevel();
    int getTimeout();
    boolean isReadOnly();
    String getName();
}

TransactionStatus

上面讲到的调用PlatformTransactionManager接口的getTransaction()的方法得到的是TransactionStatus接口的一个实现,这个接口的内容如下

代码语言:javascript
复制
public interface TransactionStatus{
    // 是否是新的事物
    boolean isNewTransaction(); 
    // 是否有恢复点
    boolean hasSavepoint();
    // 设置为只回滚  
    void setRollbackOnly();
    // 是否为只回滚
    boolean isRollbackOnly();
    // 是否已完成  
    boolean isCompleted; 
}

可以发现这个接口描述的是一些处理事务提供简单的控制事务执行和查询事务状态的方法,在回滚或提交的时候需要应用对应的事务状态

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档