Transaction

Wu Jun 2019-12-25 15:59:03
Categories: > Tags:

Spring 事务的本质是数据库对事务的支持。

@EnableTransactionManagement 开启对事务注解的解析

1 声明式事务

1.1 @Transactional 注解

属性 类型 描述
value String 事务管理器
propagation Propagation 传播级别
isolation Isolation 隔离级别
readOnly boolean 读/写与只读事务
timeout int 事务超时(秒)
rollbackFor Class 触发事务回滚的类,默认只对未检查异常有效
noRollbackFor Class 设置不需要进行回滚的异常类数组

1.2 Transactional 特性

1.3 传播级别

1.4 隔离级别

2 编程式事务

2.1 TransactionTemplate

在 doIntransaction 里处理逻辑。如果出异常了,就执行 isRollbackOnly 方法进行回滚。

@Autowired
TransactionTemplate transactionTemplate;

transactionTemplate.execute((TransactionStatus transactionStatus) -> {
    try {
        //...
    } catch (Exception e) {
        transactionStatus.isRollbackOnly();
        throw e;
    }
    return null;
});

2.2 TransactionManager

手动 commit,异常就 rollback

TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
try {
    userRepository.save(user);
    transactionManager.commit(status);
} catch (Exception e) {
    transactionManager.rollback(status);
    e.printStackTrace();
}