2013-08-23 37 views
1

我在我的web應用程序中使用了spring JDBC入站通道適配器。如果我在集羣環境中部署此應用程序,則兩個或更多實例將獲取相同的作業並運行。 任何人都可以通過更改彈簧配置來幫助解決此問題嗎? 我附上我的彈簧配置。集羣模式下的Spring JDBC適配器

<int-jdbc:inbound-channel-adapter 
    query=" SELECT JOBID, 
        JOBKEY, 
        JOBPARAM      
       FROM BATCHJOB 
      WHERE JOBSTATUS = 'A' " 
    max-rows-per-poll="1" channel="inboundAdhocJobTable" data-source="dataSource" 
    row-mapper="adhocJobMapper" 
    update=" delete from BATCHJOB where JOBKEY in (:jobKey)" 
    > 
     <int:poller fixed-rate="1000" > 
      <int:advice-chain>    
      </int:advice-chain> 
     </int:poller>  

</int-jdbc:inbound-channel-adapter> 

回答

2

不幸的是,如果沒有某種同步,這是不可能的。另外使用數據庫作爲某種消息隊列不是一個好主意(http://mikehadlow.blogspot.de/2012/04/database-as-queue-anti-pattern.html)。我試圖按照不同的方法:

  1. 使用某種消息總線+消息存儲來存儲作業對象,而不是直接執行SQL。在這種情況下,您將不得不改變作業的存儲方式。通過使用某種消息存儲支持的通道(僅限Spring集成)或將它們推送到像RabbitMQ這樣的消息隊列來存儲這些作業。
  2. 我不是100%確定的,但請記住,Spring Batch提供了一些類似於Master-Slave-Job分割和同步的東西。也許你看看那裏。
+0

感謝您的建議 –