事务五.spring事务工具类TransactionSynchronizationManager
作用
- 可以在事务执行流程中获取事务状态
- 通过往工具类注册事件来达到某事件在某事务状态下触发
用法
@Component
public class DoBeforeCommit extends TransactionSynchronizationAdapter {
@Override
public void beforeCompletion() {
super.beforeCompletion();
System.out.println("完成前做某些事");
}
}
2.调用时先注册即可
@Service
public class AllService {
@Autowired
private DataSource dataSource;
@Autowired
private DoBeforeCommit doBeforeCommit;
@Transactional
public String save(){
//注册第一个
TransactionSynchronizationManager.registerSynchronization(doBeforeCommit);
//注册第二个,匿名内部类
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void beforeCompletion() {
super.beforeCompletion();
System.out.println(TransactionSynchronizationManager.getCurrentTransactionName()+"完成事务前记录日志");
}
});
//可以获取从connectionHolder获取事务状态做相应操作
ConnectionHolder connectionHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
...
}
}
-
注册的同步方法类保存在ThreadLocal里 源码中带trigger的方法就会调用你定义的同步方法,不定义默认为空 注意由于是和ThreadLocal绑定,意味着嵌套事务和新事务都要自己注册自己要触发的事务同步方法
