FTP - 使用 Spring 集成任务调度程序进程在一段时间后停止

FTP - Using Spring Integration task-scheduler process stops after certain period

当尝试在 Unix 机器上单独启动 jar 时,任务调度的线程在一段时间后没有监听,但它在 Windows machine.Even 中工作正常,应用程序在 linux 在启动时,但有时会更进一步 working.Please 让我知道有什么方法可以避免这个问题。

@Bean
@InboundChannelAdapter(value = "inputChannel", poller = @Poller(fixedDelay = "1000", maxMessagesPerPoll = "1"))
public MessageSource<?> receive() {

    FtpInboundFileSynchronizingMessageSource messageSource = new FtpInboundFileSynchronizingMessageSource(synchronizer());
    File Temp = new File(TEMP_FOLDER);
    messageSource.setLocalDirectory(Temp);
    messageSource.setAutoCreateLocalDirectory(true);
    return messageSource;
}

private AbstractInboundFileSynchronizer<FTPFile> synchronizer() {

    AbstractInboundFileSynchronizer<FTPFile> fileSynchronizer = new FtpInboundFileSynchronizer(sessionFactory());
    fileSynchronizer.setRemoteDirectory(ftpFileLocation);
    fileSynchronizer.setDeleteRemoteFiles(false);
    Pattern pattern = Pattern.compile(".*\.xml$");
    FtpRegexPatternFileListFilter ftpRegexPatternFileListFilter = new FtpRegexPatternFileListFilter(pattern);
    fileSynchronizer.setFilter(ftpRegexPatternFileListFilter);
    return fileSynchronizer;
}


@Bean(name = "sessionFactory")
public SessionFactory<FTPFile> sessionFactory() {

    DefaultFtpSessionFactory sessionFactory = new DefaultFtpSessionFactory();
    sessionFactory.setHost(ftpHostName);
    sessionFactory.setUsername(ftpUserName);
    sessionFactory.setPassword(ftpPassWord);
    return sessionFactory;
}

@Bean(name = "inputChannel")
public PollableChannel inputChannel() {
    return new QueueChannel();
}

@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller() {

    PollerMetadata pollerMetadata = new PollerMetadata();
    pollerMetadata.setTrigger(new PeriodicTrigger(100));
    return pollerMetadata;
}

@ServiceActivator(inputChannel = "inputChannel")
public void transferredFilesFromFTP(File payload) {
    callWork(payload);
}
  1. 没有理由让一个轮询器紧接着另一个轮询器。我的意思是你不需要 QueueChannel.

  2. 神奇的 callWork(payload); 代码的作用非常有趣。是不是有什么东西堵了好久?即使这看起来像 void(没有返回等待的东西),但您可能有一些线程饥饿代码,它从默认 TaskScheduler(默认为 10)窃取所有线程。

看起来这与您的另一个问题完全相关 Spring Integration ftp Thread process