如何在处理文件时停止弹簧集成中的轮询

时间:2015-05-20 09:10:08

标签: spring spring-integration

<bean id="inFileHandler"
    class="com.yahoo.FileProcessHandler" />

<bean id="executorService" class="java.util.concurrent.Executors" factory-method="newSingleThreadExecutor" destroy-method="shutdownNow" />

<int:channel id="inChannel" />

<int:channel id="outChannel">
    <int:queue capacity="5" />
</int:channel>

<bean id="sftpFactory"
    class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
    <property name="host" value="${SFTP_HOST}"></property>
    <property name="port" value="${SFTPPORT}"></property>
    <property name="user" value="${SFTPUSERNAME}"></property>
    <property name="password" value="${SFTPPASSWORD}"></property>
</bean>

<sftp:inbound-channel-adapter id="ftpInBound" channel="inChannel"
    session-factory="sftpFactory" 
    delete-remote-files="true" remote-directory="/Files"
    local-directory="file:C:/Bhaji">
    <int:poller id="poller" fixed-rate="10000"/>
</sftp:inbound-channel-adapter>

<int:service-activator input-channel="inChannel"
    output-channel="nullChannel" ref="inFileHandler" method="handler" />

并且FileProcess处理程序是

 @Autowired
    private ExecutorService executorService;

    private static Logger log = LoggerFactory.getLogger(FileProcessHandler.class);

    public File handler(File input) {
        **//Doing some time taking process**
        return input;
}

这里在执行时间过程中我不想轮询SFTP入站通道适配器。完成所需的时间后,轮询器应自动启动。

有没有办法做到这一点?有没有办法实现它?

2 个答案:

答案 0 :(得分:0)

使用执行程序服务的是什么 - 让流程在轮询器线程上运行,并且在当前轮询完成之前不会发生下一轮询。

答案 1 :(得分:0)

您可以在fixed-delay上使用fixed-rate代替<poller>并在TaskScheduler主题中执行任务。在这种情况下,您一次只能有一个进程。下一个将在前一个结束后开始。