@Spring Framework 4.2中从未调用TransactionalEventListener

@Spring Framework 4.2中从未调用TransactionalEventListener,spring,event-listener,transactional,Spring,Event Listener,Transactional,我正在从Spring4.2实现@EventListener,它运行良好。当我尝试实现@TransactionalEventListener时,它从未被调用 ApplicationListenerMethodTransactionalAdapter进行检查: if(TransactionSynchronizationManager.isSynchronizationActive()) 而且它总是false,因此它跳过运行事件,因为它说它不在事务中 事件侦听器的代码很简单: @Transactio

我正在从Spring4.2实现
@EventListener
,它运行良好。当我尝试实现
@TransactionalEventListener
时,它从未被调用

ApplicationListenerMethodTransactionalAdapter进行检查:

if(TransactionSynchronizationManager.isSynchronizationActive())
而且它总是false,因此它跳过运行事件,因为它说它不在事务中

事件侦听器的代码很简单:

@TransactionalEventListener()
public void handleTransactionalAddEvent(Event event)
{
    logger.info("Add Event: {}");
}
发布事件的代码如下所示:

@Override
@Transactional
public Order addToOrder(String username, Long orderId)
{
    Order order = getOrder(orderId, username);

    publisher.publishEvent(new Event(order, Event.EventType.ADD));

    ... Code to do stuff to the order ...

    updateOrder(order);
    return order;
}

如果我将
@TransactionEventListener
更改为
@EventListener
,或者添加
fallbackExecution
属性,它将正常运行,但是使用
@TransactionEventListener
它永远不会被调用。

我发现我们有一个自定义的ApplicationEventMulticaster,它与事务事件侦听器冲突。我删除了它,现在它工作正常。

我发现我们有一个自定义的ApplicationEventMulticaster,它与事务事件侦听器冲突。我删除了它,现在它工作正常。

@TransactionalEventListener在其方法应该在事务中时使用。
如果没有运行任何事务,则根本不会调用侦听器,因为我们无法遵守所需的语义。

@TransactionalEventListener在其方法应在事务中时使用。
如果没有运行任何事务,则根本不会调用侦听器,因为我们无法遵守所需的语义。

试试Spring JIRA,4.2甚至不是里程碑或发布候选版本,它只生成快照,因此可能会出现问题。另外,你确定你的事务设置正确吗?试试Spring JIRA,4.2甚至不是一个里程碑,也不是一个仅适用于发布候选版本的构建快照,因此它们可能会出现问题。此外,您是否确定您的事务设置正确。