Spring integration 有没有办法手动启动入站通道适配器?[春季整合]
有没有办法在轮询器触发之前启动上述入站通道适配器? 通常轮询器一天大约触发一次,但有时我需要根据用户的交互情况立即进行操作(当用户单击“开始”按钮时) 谢谢Spring integration 有没有办法手动启动入站通道适配器?[春季整合],spring-integration,Spring Integration,有没有办法在轮询器触发之前启动上述入站通道适配器? 通常轮询器一天大约触发一次,但有时我需要根据用户的交互情况立即进行操作(当用户单击“开始”按钮时) 谢谢 ference为您提供信息:任何入站通道适配器都可以手动启动/停止(您应该为该组件提供id)。但我们应该明白,这对我们没有帮助。因为任何活动都基于触发器 正如我看到的那样,您需要通过用户事件立即开始轮询,因此您应该提供一些适当的触发器实现。例如 我建议再添加一个具有相同选项和相同频道的,但使用该自定义触发器不会破坏cron逻辑。 新的应标记
ference为您提供信息:任何
入站通道适配器
都可以手动启动/停止
(您应该为该组件提供id
)。但我们应该明白,这对我们没有帮助。因为任何活动都基于触发器
正如我看到的那样,您需要通过用户事件立即开始轮询,因此您应该提供一些适当的触发器
实现。例如
我建议再添加一个具有相同选项和相同频道的
,但使用该自定义触发器不会破坏cron
逻辑。
新的
应标记为自动启动=“false”
。用户start
按钮只需start()
该组件,是的,立即停止。将启动单个轮询任务
在这里,您应该考虑一些仅在触发器上执行的重置()
,以允许它在单击下一个按钮时启动新的轮询任务
是的,您甚至可以实现一些复杂的触发器
,包括cron
和两种
触发操作,以避免再次执行一次
,但这已经取决于您了。此nextExecutionTime()方法调用的频率如何?如果我的民意调查员每天只开一次火,情况会怎样?想象以下时间线:10:10-轮询器触发10:20-用户单击开始按钮我们是否必须等到第二天10:10系统调用nextExecutionTime()来确定下一次运行的日期?不幸的是,触发器本身没有任何作用。所有的艰苦工作都是在TaskScheduler#计划(可运行任务、触发器)
实现中完成的。TaskScheduler
计算下一个启动日期,并将任务填充到内部执行器
。该任务完成后,将启动下一个计划的计算。因此,任何自定义火灾都不会影响已计划的任务。这就是为什么我认为您无法在单个触发器中实现所有功能,因此无法在单个入站通道适配器中实现所有功能
<int-file:inbound-channel-adapter
directory="#{dir}"
channel="inp" filename-regex="^.*\.(xml|lst)$" prevent-duplicates="false">
<int:poller max-messages-per-poll="1" cron ="#{timer}"/>
</int-file:inbound-channel-adapter>