【发布时间】:2016-10-25 04:36:20
【问题描述】:
我正在尝试使用 @TransactionalEventListener 监听事件,但该事件甚至在整个事务结束之前就已被监听。即使方法抛出异常也会监听事件。
这是我正在尝试做的示例代码
@Component
public class SampleListener{
@TransactionalEventListener
public void handleSomeTransactionalEvent(SampleEvent event){
//Some Logic
}
}
@Service
@Transactional
public class SampleInsertService{
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void someTransactionalMethod(SomeDTO someDTO){
//Delete all call
//Again Insert all calls
//Publish event after insert
applicationEventPublisher.publishEvent(new SampleEvent(this, String.EventType, someDTO));
/** Some other call to DB which throws exception **/
}
}
public class SampleEvent implements ApplicationEvent{
private String eventType;
public SampleEvent(Object source, String eventType, SampleDTO sampleDTO){
//some logic
}
}
在这种情况下,只要我的事务方法中的插入完成,我的侦听器就会被调用。我相信这应该在所有数据库调用结束并且提交完成后调用。我是不是错过了什么。我正在使用 Spring 4.3.0。请指导我。
【问题讨论】:
标签: spring spring-transactions