编程式事务
编程式事务通过手动调用 TransactionManager 的方法来控制事务的开启、提交和回滚。
基本用法
TransactionManager txManager = ...;
TransactionStatus tranA = txManager.begin();
try {
// 执行业务逻辑
...
txManager.commit(tranA);
} catch (Throwable e) {
txManager.rollBack(tranA);
throw e;
}
通过 begin 方法的参数可以设置事务的 传播行为 和 隔离级别:
指定传播行为和隔离级别
TransactionStatus tranA = txManager.begin(
Propagation.REQUIRES_NEW, // 传播行为
Isolation.READ_COMMITTED // 隔离级别
);
也可以只指定传播行为(隔离级别使用默认值):
只指定传播行为
TransactionStatus tranA = txManager.begin(Propagation.REQUIRES_NEW);
获取事务管理器
方式 1:通过 TransactionHelper(同一 DataSource 共享实例)
DataSource dataSource = ...;
TransactionManager txManager = TransactionHelper.txManager(dataSource);
方式 2:直接创建 LocalTransactionManager
DataSource dataSource = ...;
TransactionManager txManager = new LocalTransactionManager(dataSource);
方式 3:通过依赖注入获取
public class TxExample {
// @Inject < Guice、Solon 和 Hasor
// @Resource or @Autowired < Spring
private TransactionManager txManager;
...
}