利用函数式接口剥离事务操作

任何接口,如果只包含一个抽象方法,它就是一个函数式接口。对于函数式接口,可以通过Lambda表达式来创建该接口的对象

Runnable就是一个函数式接口。

  1. 新建一个函数式接口,并在抽象方法上加上@Transactional的事务注解。
  2. 在实际业务逻辑中需要事务的地方,通过Lambda表达式创建该接口的对象(必须实现唯一的抽象方法)。
  3. 执行该接口对象的方法,即将方法内的逻辑以事务的形式去执行。

spring事务的依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
</dependency>
public class Test {
    public void testTransaction() {
        int a = 0;
        int b = 1;

        TransactionConsumer transactionConsumer = () -> {
            insertDataA(a);
            updateDataB(b);
        };
        transactionConsumer.doInTransaction();
    }

    private void updateDataB(int b) {
    }

    private void insertDataA(int a) {
    }
}

@FunctionalInterface
public interface TransactionConsumer {
    @Transactional
    void doInTransaction();
}