Функциональное требование неясно, но для ответа на вопрос: да, можно запустить фоновый процесс в servletcontainer.
Если вы хотите использовать фоновый поток с обложкой, используйте ServletContextListener
, чтобы подключиться к запуску и выключению Webapp и использовать ExecutorService
для его запуска.
@WebListener
public class Config implements ServletContextListener {
private ExecutorService executor;
public void contextInitialized(ServletContextEvent event) {
executor = Executors.newSingleThreadExecutor();
executor.submit(new Task()); // Task should implement Runnable.
}
public void contextDestroyed(ServletContextEvent event) {
executor.shutdown();
}
}
Если вы не в Servlet 3.0 еще и, следовательно, не может использовать @WebListener
, зарегистрировать его как следует в web.xml
вместо:
<listener>
<listener-class>com.example.Config</listener-class>
</listener>
Если вы хотите sessionwide фоновый поток, используйте HttpSessionBindingListener
, чтобы начать и остановить его.
public class Task extends Thread implements HttpSessionBindingListener {
public void run() {
while (true) {
someHeavyStuff();
if (isInterrupted()) return;
}
}
public void valueBound(HttpSessionBindingEvent event) {
start(); // Will instantly be started when doing session.setAttribute("task", new Task());
}
public void valueUnbound(HttpSessionBindingEvent event) {
interrupt(); // Will signal interrupt when session expires.
}
}
На первом создании и начать, просто сделать
request.getSession().setAttribute("task", new Task());
Благодарим за повторное воспроизведение. Извините. Просьба меня спросила, чтобы реализовать способ отправки электронной почты (предупреждение), когда некоторые данные загружены (новые данные загружены в БД). Я решил реализовать этот механизм, изменив существующее веб-приложение, создав фоновый процесс, который опросит новые данные. Данные загружаются в другое приложение, которое мне не удается. Контейнер сервлета - Tomcat. Спасибо за ответы – sangi
Почему бы вам просто не написать это сразу после фрагмента кода, который обновляет данные в БД? – BalusC
Поскольку у меня нет доступа к приложению, которое загружает данные: оно управляется и разрабатывается другими людьми, которых я не могу достичь. – sangi