TransactionalEventListener即使fallbackExecution设置为true也不会触发

问题描述 投票:0回答:1

我有一个本地库,该库作为maven依赖项集成在我的项目中。该库将发布一个事件并自己监听。

发布事件的代码:

public void send(String pushDestination, String message) {
    MessagePush msgPush = new MessagePush(pushDestination, Collections.singletonList(message));
    this.applicationEventPublisher.publishEvent(msgPush);
}

以下是库正在监听事件的代码段:

@TransactionalEventListener(
    phase = TransactionPhase.AFTER_COMMIT,
    fallbackExecution = true
)
public <T> void transactionEventListener(MessagePush msgPush) throws PushException {
    // Some logging here
    this.push(msgPush);
}

因此,代码的预期工作方式是我项目中的代码应调用send方法,该方法将使用MessagePush发布事件。该事件应由transactionEventListener侦听,并依次调用push

在我的代码中,send方法在事务边界中以not调用。但是,尽管在fallbackExecution注释中设置了TransactionalEventListener标志,但仍然不会触发transactionEventListener方法。

稍微说一下,我在我的项目中创建了一个监听器,该监听器监听库事件,并且运行良好:

@EventListener
public void onMessageReceive(MessagePush msgPush) {
    log.info("Message received inside DemoEventListener: {}", new Gson().toJson(msgPush));
}

有没有一种方法可以有效地调试此问题。

spring-boot event-listener
1个回答
0
投票

事实证明,问题出在我项目的设置中。该应用程序在活动的Spring上下文中根本没有事务管理。

© www.soinside.com 2019 - 2024. All rights reserved.