事务五.spring事务工具类TransactionSynchronizationManager

作用

  1. 可以在事务执行流程中获取事务状态
  2. 通过往工具类注册事件来达到某事件在某事务状态下触发

用法

@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绑定,意味着嵌套事务和新事务都要自己注册自己要触发的事务同步方法
经验分享 程序员 微信小程序 职场和发展