我遇到一个特定文件要从一个位置复制到另一个位置的情况。不需要轮询,因为故意触发动作。此外,在运行时决定从中获取文件的目录。
我可以进行如下配置:
<int-file:inbound-channel-adapter id="filesIn" directory="@outPathBean.getPath()" channel="abc" filter="compositeFilter" >
<int:poller id="poller" fixed-delay="5000" />
</int-file:inbound-channel-adapter>
<int:channel id="abc"/>
<int-file:outbound-channel-adapter channel="abc" id="filesOut"
directory-expression="file:${paths.root}"
delete-source-files="true" filename-generator="fileNameGenerator" />
还配置了filenamegenerator和复合过滤器类。
我是春天新手。请指出我正确的方向!!
答案 0 :(得分:1)
您可以使用this answer中讨论的FireOnceTrigger
并根据需要启动/停止适配器。
要获取对适配器的引用(SourcePollingChannelAdapter
),请将其作为@Autowire
bean注入(或Lifecycle
等)start()
/ {{1}等等。)
或者您可以使用stop()
以编程方式执行整个操作,并在this answer中进行了讨论。
答案 1 :(得分:0)
启动/停止Adapter.incase的示例有用。
SourcePollingChannelAdapter sourcePollingChannelAdapter = (SourcePollingChannelAdapter) context
.getBean("filesIn"); //adapter id in the bean configuration
// Stop
if (sourcePollingChannelAdapter.isRunning()) {
sourcePollingChannelAdapter.stop();
}
// Set Cron Expression if required when start or use any triggers
CronTrigger cronTrigger = new CronTrigger("* * * * * ?");
sourcePollingChannelAdapter.setTrigger(cronTrigger);
// Start
if (!sourcePollingChannelAdapter.isRunning()) {
sourcePollingChannelAdapter.start();
}