Проблема при остановке сервера Tomcat, на котором запущено веб-приложение, с циклом while (true)
m разработка веб-приложения для развертывания на Tomcat. Когда Tomcat запускается, я использую сервлет (в web.xml) для вызова класса Java:
Consumer
start
com.test.sample.Consumer
1
Мой Consumer.java подписывается на очередь на сервере AMQP. Я достигаю этого с помощьюwhile (true)
цикл, который отлично работает в автономной программе Java. Itt также работает в контексте веб-приложения, но я никогда не смогу остановить свой сервер Tomcat (в моей среде IDE NetBeans), и я считаю, что цикл while является виновником. Вот некоторый код:
public class Consumer {
public Consumer()
consume();
}
private void consume()
...
while (true) {
// Await incoming messages from queue
// Process message
}
}
}
Есть ли лучший способ справиться с этим? Или сигнализировать об остановке, чтобы выйти из цикла?
Спасибо!
Обновлено для использования ServletContextListener:
public final class ApplicationListener implements ServletContextListener {
private ScheduledExecutorService scheduler;
public ApplicationListener() {
}
@Override
public void contextDestroyed(ServletContextEvent event) {
System.out.println("***** Stopping Consumer *****");
scheduler.shutdownNow();
}
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("***** Starting Consumer *****");
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new ScheduledConsumer(), 0, 15000, TimeUnit.MILLISECONDS);
}
public class ScheduledConsumer implements Runnable {
@Override
public void run() {
Consumer k = new Consumer();
k.consumeOnce();
}
}
}