2015-02-16 5 views
1

Мой вопрос о this answer здесь, который, кажется, работает на мой случай (tomcat). Однако я вижу, что он использует newSingleThreadScheduledExecutor(). В моем случае периодическая задача, которая должна быть выполнена, может быть длительной, и я хочу убедиться, что она будет не заблокировать мой веб-сайт до его завершения (выполняется как разделенный Thread). Кроме того, я хочу убедиться, что моя задача Runnable сможет совместно использовать пул соединений mySQL (через спящий режим), который использует веб-сайт. Итак, это правильный подход или мне нужно использовать что-то еще?Запуск запланированной задачи в Tomcat

+0

Моим решением было бы использовать планировщик, такой как Quartz. С этим легко работать и уже много лет тестируется в prod. Тем не менее, мне не нравится писать это как ответ на эту тему, так как я вообще против внедрения новых фреймворков для решения одной задачи :) –

ответ

2

Я хочу, чтобы убедиться, что она не будет блокировать мой веб-сайт до тех пор, пока завершена (запустить как отдельный Thread)

HTTP-коннектор пул потоков и пул потоков, выделенный для запуска таймера задачи разные. Они не зависят друг от друга и не будут блокировать ваш сайт.

Кроме того, я хочу, чтобы убедиться, что моя задача Runnable сможет доли MySql пула соединений (через спящий режим), что веб-сайт использования. Итак, это еще правильный подход или мне нужно использовать что-то еще?

Настройте общий пул соединений с помощью фреймворка, например commons DBCP, и найдите ресурс JNDI. Как только вы найдёте, что DataSource и работа над соединением завершена, верните соединение обратно в пул.

Подход в порядке.

+0

Большое вам спасибо. Что касается соединения, я уже использую jdbc + hibernate – lviggiani

+0

еще один вопрос. Все задачи, добавленные «scheduler.scheduleAtFixedRate», выполняются последовательно (в одном потоке) или выполняются параллельно, и каждая задача имеет свой собственный Thread? Я ищу решение с несколькими потоками, где каждая задача выполняется независимо. – lviggiani

+0

Хорошо, я сделал тест и увидел, что «newSingleThreadScheduledExecutor» выполнит задачи последовательно. Если я хочу использовать их параллельно, тогда мне нужно использовать «newScheduledThreadPool» – lviggiani

Смежные вопросы