1

当前目录和固定速率轮询周期取自属性文件。

<file:inbound-channel-adapter id="batchFilesStock" directory="#{configurationService.configuration.getProperty('qlacceleratorcore.batch.impex.stockbasefolder')}"
    filename-regex="^(\d+)\-(.*).csv" comparator="fileOrderComparator" prevent-duplicates="false">
    <int:poller fixed-rate="#{configurationService.configuration.getProperty('pollerperiod')}"/>                            
</file:inbound-channel-adapter>    

我喜欢从数据库中获取固定利率值,否则该值应该在运行时可配置。我搜索了许多链接,但无法找出解决方案。有任何想法吗?

4

1 回答 1

2

有一个示例应用程序https://github.com/SpringSource/spring-integration-samples/tree/master/intermediate/dynamic-poller展示了如何使用具有可配置轮询率的轮询器。

请注意,更改将在下次投票时生效...

“更改轮询周期时,对触发器的更改将在当前速率的 NEXT 轮询之后发生。因此,如果当前轮询周期为 60 秒,而您将其更改为 1 秒,则最多可能需要 60 秒效果,取决于您在轮询周期中进行更改的时间。”

实质上,您创建了一个自定义触发器,该触发器在调度程序调用时返回适当的值nextExecutionTime()

编辑:

下面的评论询问“......如何在多个轮询器中使用自定义触发器”。

好吧,看看nextExecutionTime()。请注意,特定轮询器的状态包含在传递给方法 ( TriggerContext) 的参数中,该方法用于计算下一次执行时间。

因此,您可以简单地在任意数量的轮询器中重复使用触发器......

<bean id="myTrigger" class="..." />

<file:inbound-channel-adapter id="fi1" ... >
    <poller ... trigger="myTrigger" />
</file:inbound-channel-adapter>

<file:inbound-channel-adapter id="fi2" ... >
    <poller ... trigger="myTrigger" />
</file:inbound-channel-adapter>

如果您想要每个不同的速率,那么只需为每个使用不同的触发器(适当配置)。

于 2013-04-09T16:37:14.133 回答