CallbackService可用Runnable替代,代码如下:
```java
public class TransactionCommitHandler {
private ExecutorService executor;
private boolean thread;
public TransactionCommitHandler executor(ExecutorService executor) {
this.executor = executor;
return this;
}
public TransactionCommitHandler setThread(boolean thread) {
this.thread = thread;
return this;
}
public boolean supportExecutor(){
return executor != null;
}
public boolean supportThread() {
return thread;
}
/**
* 确保当前事务提交后 执行runnable
*
* @param runnable
*/
public void handle(Runnable runnable) {
// 保证当前线程有活跃的事务才会执行
if (TransactionSynchronizationManager.isActualTransactionActive()) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
if (supportExecutor()) {
// 通过executor执行
executor.execute(runnable);
} else if (supportThread()) {
// 通过new thread方式执行
new Thread(runnable).start();
} else {
// 通过当前主线程执行
runnable.run();
}
}
});
}
}
}
```
SpringBoot事务提交后执行后续操作SpringBoot事务提交后执行后续操作 业务场景 业务需求上经常会有一些边缘操作,比如主流程操作A:用户报名课程操作入库,边缘操作B:发送邮件或短信通知。 业务要求 操作...