利用函数式接口剥离事务操作
任何接口,如果只包含一个抽象方法,它就是一个函数式接口。对于函数式接口,可以通过Lambda表达式来创建该接口的对象
Runnable就是一个函数式接口。
- 新建一个函数式接口,并在抽象方法上加上
@Transactional
的事务注解。 - 在实际业务逻辑中需要事务的地方,通过Lambda表达式创建该接口的对象(必须实现唯一的抽象方法)。
- 执行该接口对象的方法,即将方法内的逻辑以事务的形式去执行。
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();
}