报告带有普通 @Transactional 注解的 @TransactionalEventListener 方法。

一个事务事件侦听器在原始事务的清理阶段运行,该事务仍然有效,但处于未定义状态。 因此,常规 @Transactional 在未定义的事务状态下执行,并在运行时失败。 只有当传播为 REQUIRES_NEWNOT_SUPPORTED,或者该方法同样带有 @Async 注解(它会在具有干净事务状态的单独线程上运行侦听器)时,该组合才有效。

示例:


  @Component
  class MyListener {
    @Transactional // 报告:在未定义的事务状态下运行
    @TransactionalEventListener
    void on(MyEvent event) { ... }
  }

在应用该快速修复后:


  @Component
  class MyListener {
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    @TransactionalEventListener
    void on(MyEvent event) { ... }
  }