0

当尝试在 Unix 机器上单独启动 jar 时,任务计划的线程在一段时间后没有监听,但它在 Windows 机器上工作正常。即使应用程序在启动时在 linux 中工作,但有时它不工作。请让我知道有什么办法可以避免这个问题。

@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);
}
4

1 回答 1

0
  1. 没有理由让一个轮询器紧跟在另一个轮询器之后。我的意思是你不需要那个QueueChannel

  2. 那个神奇的callWork(payload);代码做了什么真的很有趣。是不是有什么东西堵了很久?即使看起来像void(没有返回等待的东西),但你可能有一些线程饥饿代码,它从默认值中窃取所有线程TaskScheduler(默认情况下为 10)。

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

于 2016-06-17T21:25:41.517 回答