585 字
3 分钟
SSM06-Spring中的事务
2023-06-03
2023-11-25

详细的描述了Spring中的事务概念。

事务的简介#

事务作用:在数据层保障一系列的数据库操作同成功同失败
Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败

如何开启事务管理?

步骤如下:

  1. 在业务层接口上添加Spring事务管理
public interface xxxxx {
@Transactional
public void xxx {
代码体
}
}

注意事项:
Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合
注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务

  1. 设置事务管理器
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager ptm = new DataSourceTransactionManager();
ptm.setDataSource(dataSource);
return ptm;
}
  1. 在主配置类中开启事务型驱动 添加如下注解:
@EnableTransactionmanagement

Spring事务角色#

事务角色

事务管理员#

发起事务方,在Spring中通常指代业务层开启事务的方法

事务协调员#

加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

事务属性#

属性作用实例
readOnly设置是否为只读事务readOnly = true 只读事务
timeout设置事务的超过时间timeout = -1 永不超时
rollbackFor设置事务回滚异常(class)rollbackFor = (NullPointException.class)
rollbackForClassName设置事务回滚异常(String)同上格式为字符串
noRollbackFor设置事务不回滚异常(class)noRollbackFor = (NullPointException.class)
noRollbackForClassName设置事务不回滚异常(String)同上格式为字符串
propagation设置事务传播行为…

事务传播行为:事务协调员对事务管理员所携带事务的处理态度

Spring 事务传播的共享事务、独立事务与保存点关系

原理示意:已有事务时,REQUIRED 加入同一个物理事务,REQUIRES_NEW 挂起外层并新建独立事务,NESTED 在支持时使用同一事务内的保存点。没有外层事务时,这三种通常都开启事务;SUPPORTS、MANDATORY、NEVER 与 NOT_SUPPORTED 则分别决定是否加入、是否强制存在或排除事务。传播描述的是调用边界的处理方式,需经过事务代理且由具体事务管理器支持。