У меня запущено приложение Spring Boot / Spring Integration, которое использует @Poller
в Spring Integration, а также @Scheduled
в другом методе в основном несвязанном классе. @Poller
предназначен для опроса FTP-сервера на наличие новых файлов. Однако я обнаружил, что @Poller
как-то мешает моему @Scheduled
методу.
У @Poller
есть maxMessagesPerPoll = -1
, поэтому он обработает столько файлов, сколько сможет получить. Однако, когда я впервые запускаю свое приложение, на FTP-сервере находится более 100 файлов, поэтому он будет обрабатывать их все. Я обнаружил, что если эти файлы обрабатываются, то @Scheduler
вообще перестает запускаться.
Например, если я установлю для @Scheduled
значение fixedDelay = 1
, которое будет срабатывать каждую миллисекунду и затем запустите мое приложение, метод @Scheduled
будет срабатывать несколько раз, пока @Poller
не сработает и не начнет обрабатывать сообщения, после чего мой метод @Scheduled
полностью прекратит запуск. Я предположил, что просто была какая-то очередь задач, которая заполнялась @Poller
, поэтому мне просто нужно было дождаться обработки всех сообщений, но даже после того, как @Poller
полностью завершен и обработал все файлы метод @Scheduled
по-прежнему не запускается вообще.
Я думаю, что, возможно, существует какая-то очередь задач, которая заполняется @Poller
, что нарушает мой метод @Scheduled
, но если это так, я все еще не вижу способа, которым я могу используйте отдельную очередь задач для различных методов или любые другие возможные параметры для настройки или исправления этой проблемы.
Кто-нибудь знает, что может происходить с моим @Scheduled
методом и как я могу это исправить?
@Poller
:
@Bean
@InboundChannelAdapter(channel = "ftpChannel", poller = @Poller(cron = "0/5 * * ? * *", maxMessagesPerPoll = "-1"))
public MessageSource<InputStream> myMessageSource() {
//Build my message source
return messageSource;
}
@Scheduled
:
@Scheduled(fixedDelay = 6000)
public void myScheduledMethod(){
//Do Stuff
}