我正在實現Spring 4.2中的@EventListener
,它工作正常。當我嘗試實現@TransactionalEventListener
時,它永遠不會被調用。@TransactionalEventListener永遠不會在Spring Framework 4.2中調用
的ApplicationListenerMethodTransactionalAdapter使檢查:
if(TransactionSynchronizationManager.isSynchronizationActive())
,它始終是假的,因此跳過運行事件,因爲它說,這是不是在交易。
的事件監聽器的代碼很簡單:
@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
它永遠不會被調用。
嘗試Spring JIRA,4.2甚至不是一個里程碑或發佈候選版本,只構建快照,以便它們可能有問題。你也確定你的交易設置正確。 –