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

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

Runnable就是一个函数式接口。

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

spring事务的依赖:

1
2
3
4
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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();
}