有没有办法启动文件:入站通道适配器通过代码?

时间:2014-11-03 05:00:53

标签: java spring-integration

我遇到一个特定文件要从一个位置复制到另一个位置的情况。不需要轮询,因为故意触发动作。此外,在运行时决定从中获取文件的目录。

我可以进行如下配置:

<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和复合过滤器类。

我是春天新手。请指出我正确的方向!!

2 个答案:

答案 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();
        }