Spring 的事务管理

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。这样可以防止出现脏数据,防止数据库数据出现问题。

开发中为了避免这种情况一般都会进行事务管理。Spring 中也有自己的事务管理机制,一般是使用 TransactionMananger 进行管 理,可以通过Spring的注入来完成此功能。Spring 提供了几个关于事务处理的类:

PlatformTransactionManager 这个是 Spring 提供的用于管理事务的基础接口,其下有一个实现的抽象类 AbstractPlatformTransactionManager,我们使用的事务管理类例如 DataSourceTransactionManager 等都是这个类的子类。

一般事务定义步骤:

TransactionDefinition td =newTransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try{ 
    //do sth
    transactionManager.commit(ts);
}catch(Exception e){
    transactionManager.rollback( ts);
}

Spring 事务管理方式

  1. 编程式事务,在代码中硬编码(不推荐使用);

编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象。

void add(){
    transactionTemplate.execute(newTransactionCallback() {
        pulic Object doInTransaction( TransactionStatus ts) {
         //do sth
        }
    }
}
  1. 声明式事务,在配置文件中配置或基于注解声明(推荐使用)。 围绕Poxy的动态代理 能够自动的提交和回滚事务 org.springframework.transaction.interceptor.TransactionProxyFactoryBean

Spring 事务中的隔离级别

TransactionDefinition 接口中定义了五个表示隔离级别的常量:

Spring 事务中的几种事务传播行为

支持当前事务的情况:

不支持当前事务的情况:

其他情况:

为什么要有事务传播行为?


Tagged #spring.