报告带有普通 @Transactional 注解的 @TransactionalEventListener 方法。
一个事务事件侦听器在原始事务的清理阶段运行,该事务仍然有效,但处于未定义状态。 因此,常规 @Transactional 在未定义的事务状态下执行,并在运行时失败。 只有当传播为 REQUIRES_NEW 或 NOT_SUPPORTED,或者该方法同样带有 @Async 注解(它会在具有干净事务状态的单独线程上运行侦听器)时,该组合才有效。
示例:
@Component
class MyListener {
@Transactional // 报告:在未定义的事务状态下运行
@TransactionalEventListener
void on(MyEvent event) { ... }
}
在应用该快速修复后:
@Component
class MyListener {
@Transactional(propagation = Propagation.REQUIRES_NEW)
@TransactionalEventListener
void on(MyEvent event) { ... }
}