Я хочу, чтобы повторяющаяся задача выполнялась в фоновом режиме в веб-приложении, которое запускалось каждые 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?
Заранее спасибо.