我是Spring Integration的新手,需要在我的工作中找到解决方案。
我需要做的是:
- 提供db的轮询机制。
- 当某些情况发生时,应该能够启用/禁用轮询
- 轮询需要超时(例如,如果状态在5分钟内没有变化,那么就做一些事情)
- 需要将数据传递给投票机制
基本上就是我所需要的一切。我正在考虑使用Spring的任务:计划任务,但我无法看到手动启用/禁用任务和设置超时的选项。 需要传递给轮询机制的数据可以存储在Spring bean中。如果我走向正确的方向或者我应该尝试其他方法,你们能告诉我们吗?
答案 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来查看通道的消息计数等)。