gpt4 book ai didi

java - TransactionalEventListener 是否总是接收事件

转载 作者:行者123 更新时间:2023-12-01 22:29:58 24 4
gpt4 key购买 nike

我想使用@TransactionalEventListener来接收回滚事件后,但是@TransactionalEventListener似乎可以接收事务方法中的所有事件。

听众:

@Slf4j
@Component
public class TransactionListener {

@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK,classes = TransactionEvent.class)
public void onEventHandler(TransactionEvent event) {
log.info("after rollback. event = {}", event);
}

}

测试:

@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
public class TaskAutoRepoTest {

@Autowired
private ApplicationEventPublisher publisher;

@Test
public void saveTest() throws InterruptedException {

publisher.publishEvent(new TransactionEvent("name", "sssssss"));
Thread.sleep(1000);
}
}

运行测试时TransactionListener始终接收事件并打印日志。

最佳答案

请考虑共享其他人可以运行的实际示例,而不是在文本中粘贴代码。如果您有 GitHub 帐户,则可以非常轻松地创建存储库并将这些内容复制/粘贴到从 start.spring.io 创建的小项目中。

我已经做到了,它按预期工作,请参阅 https://github.com/snicoll-scratches/test-so-58552671

请注意,我保留了 Thread.sleep 部分,但如果事务已在该方法的边界之外启动,则您不应该这样做,因为 sleep 将阻止事务完成。

无论如何,上面的代码与您声称的不符,所以一定发生了其他事情。如果您仍然可以重现该问题,您可以查看示例项目并向其发送包含更改的 PR。

编辑:感谢您为我的原始示例提供 PR。您的设置根本不使用事务管理(没有事务支持,没有 Activity 的事务管理器)。 TransactionalEventListener 是一个 EventListener,因此事件将按原样传递。我已将 @EnableTransactionManagement 添加到您的 PR 中,随着交易基础设施就位,一切都按预期进行。

关于java - TransactionalEventListener 是否总是接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58552671/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com