Spring集成 - 文件:如何在运行时定义固定速率属性值

时间:2013-04-09 16:02:04

标签: spring-integration

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

<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>    

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

1 个答案:

答案 0 :(得分:2)

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

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

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

本质上,您创建一个自定义触发器,在调度程序调用{​​{1}}时返回适当的值。

编辑:

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

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

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

TriggerContext

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