基于函数式接口实现spring事务提交之后再执行的操作

文章目录

  • 前言
  • 实现

前言

现象:就是在 @Transactional 注解下一把梭哈,比如操作完数据库然后直接删缓存。

这里就会有问题:就是当事务还没提交的时候,你就把缓存删除了。导致小程序端查询把旧的数据放到缓存中。

那具体得怎么操作呢?其实之前已经写过一篇博客介绍了,这次只是使用函数式接口来方便开发,但是原理是不变的。

  • @Transational事务提交之后再处理的相关方案

实现

自定义下函数式接口

@FunctionalInterface
public interface TransationCallBackFuntion {

    void execute();

}

实现一个service层接口

public void transation(TransationCallBackFuntion funtion) {
        if (TransactionSynchronizationManager.isSynchronizationActive()) {
            TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
                @SneakyThrows
                @Override
                public void afterCommit() {
                    funtion.execute();
                }
            });
        }
    }

主要是使用事务同步管理器来注册一个适配器,在事务提交之后执行相应的操作。

具体业务调用

基于函数式接口实现spring事务提交之后再执行的操作_第1张图片

执行结果

基于函数式接口实现spring事务提交之后再执行的操作_第2张图片
在提交事务之后,我们看到数据库已经提交了操作,然后再等20秒,缓存被删除了。

你可能感兴趣的:(基于函数式接口实现spring事务提交之后再执行的操作)