今天开发,看到这个代码
applicationEventPublisher.publishEvent(new MyAfterTransactionEvent("传参"));
MyAfterTransactionEvent对象
public static class MyAfterTransactionEvent extends ApplicationEvent {
参数;
public MyAfterTransactionEvent(参数){
}
}
开始不理解,找到这个listener
@Component
public class MyTransactionListener {
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void handleOrderCreatedEvent(MyAfterTransactionEvent event) {
//event使用event参数
log.info("异步执行代码");
}
}
网上查询之后,有一定的理解
使用TransactionSynchronizationManager方法
```bash
@EventListener
void onSaveUserEvent(SaveUserEvent event) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
Integer id = event.getEventData();
User u = userDao.getUserById(id);
String phone = u.getPhoneNumber();
MessageUtils.sendMessage(phone);
}
});
}
@TransactionalEventListener原理其实是基于TransactionSynchronizationManager实现的