Spring集成 - 需要建议

时间:2012-12-31 11:49:11

标签: architecture spring-integration

我是Spring Integration的新手,需要在我的工作中找到解决方案。

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

基本上就是我所需要的一切。我正在考虑使用Spring的任务:计划任务,但我无法看到手动启用/禁用任务和设置超时的选项。 需要传递给轮询机制的数据可以存储在Spring bean中。如果我走向正确的方向或者我应该尝试其他方法,你们能告诉我们吗?

3 个答案:

答案 0 :(得分:1)

这是一个如何使用spring integration

轮询数据库的简单示例
    <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();

答案 1 :(得分:0)

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

  • 禁用位可以通过任务检查来完成,如果它被禁用,从而不做任何事情。

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

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

答案 2 :(得分:0)

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

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

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