2012-12-31 93 views
0

我對Spring Integration非常陌生,需要在我的工作中找出解決方案。彈簧集成 - 需要諮詢

我需要做的是:
- 從db提供輪詢機制。
- 用於輪詢需要超時(例如,如果爲5分鐘分鐘狀態犯規變化做stomething)
- - 當某些條件發生
應該能夠啓用/禁用輪詢需要將數據傳遞到輪詢機制

基本上它就是我所需要的。我正在考慮使用Spring的任務:計劃任務,但我不能看到手動啓用/禁用任務和設置超時的選項。 需要傳遞給輪詢機制的數據可以存儲在Spring bean中。你們能否告訴我,如果我正在走向正確的方向,還是應該嘗試其他方法?

回答

0

你可以使用task:scheduled-tasks,你需要實現你想要的位,因爲spring沒有提供你想要的所有功能。

  • 禁用位,可以通過任務檢查完成,如果它被禁用,並因此不做任何事情。

  • 關於超時,您的代碼需要弄清楚「狀態不會改變」和「做些什麼」。

  • 需要將數據傳遞給輪詢機制:輪詢機制可以加載它需要的數據,或從源(隊列,共享對象等)讀取數據。

+0

THX,奧古斯托您的回覆。不過,我不希望計劃任務閒置。如果不需要輪詢,我寧願打開和關閉它。超時的問題是在這種情況下,spring處理超時或者我必須自己實現它? –

0

使用Spring Integration,您可以使用<int-jdbc:inbound-channel-adapter/>。您可以使用Lifecycle methodsisRunning(),start(),stop()來啓動/停止它。

或者,您可以發送消息到<control-bus/>開始/停止。

有很多方法可以檢測到沒有活動(例如,使用JMX查看通道的消息計數等)。

1

這裏有一個如何,如果你想有條件地停止輪詢與Spring集成

<int-jdbc:inbound-channel-adapter 
      id="jdbcPoller" channel="jdbc.poll.channel" 
      data-source="dataSource" query="select count(*) from test_table"> 
     <int:poller fixed-rate="500" task-executor="pollTaskExecutor"/> 
    </int-jdbc:inbound-channel-adapter> 

    <int:channel id="jdbc.poll.channel"/> 

數據庫一個簡單的例子,你可以做這樣的事情

 //stop the polling 
    AbstractEndpoint poller = context.getBean("jdbcPoller",AbstractEndpoint.class); 
    poller.stop();