Spring 事务 Transaction 开发实践

Spring 事务管理:

  • 编程式
  • 注解式

事务的传播机制

@Transactional(propagation=xx),选项如下:

  • Propagation.SUPPORTS:如果调用的 bean 中开启了事务,则加入事务,否则就不用事务。

  • Propagation.NOT_SUPPORTED:不开启事务。

  • Propagation.REQUIRED:(默认形式)如果调用的 bean 中开启了事务,则加入事务,否则就新建事务。

  • Propagation.REQUIRES_NEW:如果调用的 bean 中开启了事务,则原来的事务挂起,新建事务,否则就新建事务。

  • Propagation.MANDATORY:必须在一个 已有 的事务中执行,否则抛出异常。

  • Propagation.NEVER:与 MANDATORY 相反,必须在一个 没有 的事务中执行,否则抛出异常。

事务的超时设置

@Transactional(timeout=30) 设置为 30 秒
默认为 -1 秒,即永不超时。

事务的隔离级别

设置底层数据库的隔离级别,用于处理 多事务并发 的情况。

参见 数据库隔离级别 脏读 VS 不可重读读 VS 幻读

@Transactional(isolation=xx),选项如下:

  • Isolation.READ_UNCOMMITTED:读取未提交的数据。会产生脏读。

  • Isolation.READ_COMMITTED:(SQL Server 默认形式)读取已提交的数据。

  • Isolation.REPEATABLE_READ:(MySQL 默认形式)可重复读。

  • Isolation.SERIALIZABLE:将并发事务串行化处理。

Spring 事务 Transaction 开发实践

配置数据源 dataSource


  ...

通过 dataSource 配置 TransactionManager


  



通过 注解 来使用

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void saveUserInfo(User user) {
  ...
}

你可能感兴趣的:(Spring 事务 Transaction 开发实践)