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);
}
没有理由让一个轮询器紧接着另一个轮询器。我的意思是你不需要 QueueChannel
.
神奇的 callWork(payload);
代码的作用非常有趣。是不是有什么东西堵了好久?即使这看起来像 void
(没有返回等待的东西),但您可能有一些线程饥饿代码,它从默认 TaskScheduler
(默认为 10)窃取所有线程。
看起来这与您的另一个问题完全相关 Spring Integration ftp Thread process
当尝试在 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);
}
没有理由让一个轮询器紧接着另一个轮询器。我的意思是你不需要
QueueChannel
.神奇的
callWork(payload);
代码的作用非常有趣。是不是有什么东西堵了好久?即使这看起来像void
(没有返回等待的东西),但您可能有一些线程饥饿代码,它从默认TaskScheduler
(默认为 10)窃取所有线程。
看起来这与您的另一个问题完全相关 Spring Integration ftp Thread process