0

我对 Spring Integration 很陌生,需要在我的工作中找出解决方案。

我需要做的是:
- 从 db 提供轮询机制。
- 应该能够在某些情况发生时启用/禁用轮询
- 轮询需要超时(例如,如果状态在 5 分钟内没有改变,则需要做一些事情)
- 需要将数据传递给轮询机制

基本上它都是我需要的。我正在考虑使用 Spring 的任务:计划任务,但我看不到手动启用/禁用任务和设置超时的选项。需要传递给轮询机制的数据可以存储在 Spring bean 中。你们能否建议我是朝着正确的方向前进还是应该尝试其他方法?

4

3 回答 3

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();
于 2013-01-02T02:14:02.877 回答
0

您可以使用task:scheduled-tasks,并且您需要实现所需的位,因为 spring 并没有提供您想要的 OOTB 的所有功能。

  • 禁用位可以通过任务检查它是否被禁用来完成,因此不做任何事情。

  • 关于超时,您的代码需要弄清楚“状态不变”和“做某事”是什么。

  • 需要向轮询机制传递数据:轮询机制可以加载它需要的数据,或者从源(队列、共享对象等)读取数据。

于 2012-12-31T11:54:18.547 回答
0

使用 Spring Integration,您可以使用<int-jdbc:inbound-channel-adapter/>. Lifecycle methods isRunning()您可以使用, start(),来启动/停止它stop()

或者,您可以向 a 发送消息以<control-bus/>启动/停止。

有多种方法可以检测到无活动(例如,使用 JMX 查看通道的消息计数等)。

于 2012-12-31T15:21:02.973 回答