Запланированное задание на сервере Tomcat через ScheduledExecutorService не запущено - PullRequest
0 голосов
/ 03 октября 2019

Я хочу, чтобы повторяющаяся задача выполнялась в фоновом режиме в веб-приложении, которое запускалось каждые 5 минут. Вдохновленные ответами на эти два вопроса

Периодическая задача на сервере Tomcat

Как запланировать задачу в Tomcat

и это руководство:

https://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html

Я пытался создать ScheduledExecutorService

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
class BeeperTest implements ServletContextListener {
   private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

   @Override
   public void contextInitialized(ServletContextEvent event) {
       this.scheduler.scheduleAtFixedRate(new Runnable() {
           public void run() { System.out.println("beep"); }
       }, 1, 1, TimeUnit.MINUTES);
   }

   @Override
   public void contextDestroyed(ServletContextEvent event) {
       scheduler.shutdownNow();
   }
}

Хотя это не сработало. С аннотацией @WebListener это делает мой веб-сервер недоступным и выдает org.apache.coyote.http11.AbstractHttp11Processor.process Ошибка синтаксического анализа заголовка запроса HTTP. Примечание: дальнейшие ошибки синтаксического анализа заголовка HTTP будут регистрироваться на уровне DEBUG. java.lang.IllegalArgumentException: недопустимый символ (CR или LF), найденный в имени метода Без аннотации @WebListener это не вызывает задачу. Что я пропускаю или делаю неправильно? Нужно ли его настраивать где-то еще, или это просто невозможно в контейнере Tomcat?

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...