2015-05-19 120 views
1

我正在實現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它永遠不會被調用。

+0

嘗試Spring JIRA,4.2甚至不是一個里程碑或發佈候選版本,只構建快照,以便它們可能有問題。你也確定你的交易設置正確。 –

回答

1

我發現我們有一個與事務性事件偵聽器衝突的自定義ApplicationEventMulticaster。我刪除它,現在它工作正常。

0

@TransactionalEventListener在其方法應該在事務中時使用。 如果沒有事務正在運行,那麼根本不會調用監聽器,因爲我們無法遵守所需的語義。

相關問題