Spring integration Spring集成:尾部入站通道适配器:(1)如何传递动态文件名;(2)以编程方式触发轮询器

Spring integration Spring集成:尾部入站通道适配器:(1)如何传递动态文件名;(2)以编程方式触发轮询器,spring-integration,Spring Integration,我需要跟踪文件,因此我使用跟踪入站通道适配器 有两个挑战。 每次批处理运行时,文件名和文件路径都会更改。我正在寻找一些regex支持,比如在入站通道适配器中找到的这个属性(filename regex)。我只在入站通道适配器中看到一个名为file的属性,它需要一个静态文件名(如下所示)。如何将动态文件名传递给入站通道适配器 <int-file:tail-inbound-channel-adapter channel="fileChannel" file="xyz" delay="99999

我需要跟踪文件,因此我使用跟踪入站通道适配器

有两个挑战。 每次批处理运行时,文件名和文件路径都会更改。我正在寻找一些regex支持,比如在入站通道适配器中找到的这个属性(filename regex)。我只在入站通道适配器中看到一个名为file的属性,它需要一个静态文件名(如下所示)。如何将动态文件名传递给入站通道适配器

<int-file:tail-inbound-channel-adapter channel="fileChannel" file="xyz" delay="999999999999999" end="false" reopen="true" file-delay="999999999999999" />

另一个挑战是,我不希望这个轮询器在应用程序启动时立即开始轮询。相反,它应该在文件准备好跟踪时开始轮询。我如何控制它

如上所示,我尝试在配置文件中分配一些较大的延迟,然后尝试在运行时修改延迟值。但这没有帮助


我的要求的任何其他替代方式。感谢您的宝贵意见。

适配器实现了
SmartLifecycle

设置
自动启动=“false”
。获取适配器的引用(例如
@AutoWired
context.getBean(“foo”,FileTailingMessageProducerSupport.class)
),假设适配器具有
id=“foo”

要启动适配器,请使用
foo.start()


要更改文件,
foo.stop();setFile(newFile);foo.start()

谢谢Gary。你搞定了,伙计。正如所解释的那样。非常感谢您的帮助和及时回复。Gary,关于这个话题的相关问题。目前,我可以通过FileTailingMessageProducerSupport动态设置文件,启动和停止文件跟踪。现在,当用户触发另一个作业时,将创建一个新文件,该文件需要以相同的方式进行轮询和跟踪。因为FileTailingMessageProducerSupport是由配置和singleton类创建的,所以当第二个作业设置新文件名时,第一个作业的拖尾不再发生。任何克服这个用例的想法都将不胜感激。Gary,请注意我们的工作是长期运行的工作。因此,很有可能同时运行两个或三个作业,这意味着它们都必须能够同时轮询/跟踪自己的文件。我在想,如果我可以自己创建FileTailingMessageProducerSupport类,我可以每次运行创建它们。但是这个类是一个抽象类。我找不到哪个类实现了这个。还有更好的想法吗?是的,您必须为每个适配器实例化一个适配器。
FileTailingMessageProducerSupport
的两个实现(子类)是
OSDelegatingFileTailingMessageProducer
apachecommons filetailingmessageproducer
FileTailInboundChannelAdapterFactoryBean
根据属性决定要创建哪一个。我通常建议在有
tail
命令的操作系统上运行操作系统授权适配器。Gary,谢谢你的提示。现在,对于每个作业,我都能够在Windows上实例化ApacheCommonsFileTailingMessageProducer类,在Linux上实例化OSDelegatingFileTailingMessageProducer类。当我在Linux上运行作业时,我得到IOException:无法运行程序“ADAPTER\u NOT\u INITIALIZED”:错误=2,没有这样的文件或目录。请注意,我正在将file、TailAttemptsDelay和-F-n+0设置为OSDelegatingFileTailingMessageProducer的选项,并启动它们。被轮询的文件是由Python脚本创建的,开始编写该文件需要几分钟时间。。。