2017-06-08 46 views
1

我正在使用Spring集成使用其入站通道適配器使用RSS訂閱源並將訂閱源寫入數據庫表。Spring Integration Feed入站通道適配器重複條目

爲了防止在進程停止/啓動時出現重複條目​​,我啓用了PropertiesPersistingMetadataStore。作爲輔助措施,在數據庫表中,我還在Feed ID/Feed條目鏈接列中有一個唯一約束。

這似乎工作正常,但我注意到一些重新啓動(不是所有的時間),我收到一些數據庫異常錯誤,它試圖再次插入相同的RSS源項目。

在什麼樣的條件下,我會得到這些重複的錯誤,無論如何,我可以繞過它們嗎?

回答

0

PropertiesPersistingMetadataStore只在正常的應用程序關閉時保持其狀態(當應用程序上下文中bean爲destroy()時)。

但是,它實現了Flushable,因此您可以在持續後在您的流程中對其調用flush()

在db事務提交後提交表達式@metadataStore.flush()之後,您可以使用transaction synchronization來刷新存儲。

或者,您可以使用更強大的持久性存儲,如Redis,它在每次更新時都會保留。

+0

謝謝加里。該應用程序正常關閉,所以我認爲該狀態持續,但我同意我需要開始尋找使用Redis。我查看了PropertiesPersistingMetadataStore文檔,它看起來像使用元數據存儲中的最新發布日期。我懷疑發生了什麼是一些飼料,發佈的日期正在更新,因此它又出現了。如果是這種情況,是否容易發現這個異常並使用DSL更新該項目? – Swordfish

+0

您可以將錯誤通道添加到輪詢器,並對錯誤流進行更新(ErrorMessage的有效負載是屬性爲「failedMessage」和「cause」的MessagingException)。或者,您可以將一個['ExpressionEvaluatingRequestHandlerAdvice'](http://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#expression-advice)添加到jdbc適配器的端點'adviceChain' 。 –

+0

我希望我們有一天會修復https://jira.spring.io/browse/INT-1810 ...並且這個用例也會被滿足。 –

相關問題