Я хочу получать из подписки и сохранять фиды в БД из подписки каждые 6 часов. Я хочу иметь поток таймера в фоновом режиме для выполнения этой задачи.
Какой лучший способ? Обычный поток таймера или Quartz API?
Я хочу получать из подписки и сохранять фиды в БД из подписки каждые 6 часов. Я хочу иметь поток таймера в фоновом режиме для выполнения этой задачи.
Какой лучший способ? Обычный поток таймера или Quartz API?
Для начала я бы не стал использовать для этого JSP. Там это не для.
При работе с Java EE 5 используйте для этого предоставленные контейнером API планирования заданий. Дальнейшие подробности зависят от контейнера, который вы используете. Например, JBoss AS 5 поставляется с Quartz из коробки. Или когда вы используете фреймворк поверх JSP/Servlet, который предлагает API планирования заданий, например Spring, то вы должны использовать его.
Если их нет (например, вы используете только Tomcat 6) или вы хотите быть независимым от контейнера и/или фреймворка, создайте ServletContextListener
с ScheduledExecutorService
. Более подробную информацию можно найти в этом ответе.
Или, если вы уже используете контейнер Java EE 6, который поддерживает EJB 3.1 (JBoss AS 6, GlassFish 3, но, следовательно, не Tomcat 7), проще всего создать @Singleton
EJB с @Schedule
.
@Singleton
public class UpdateSubscriptions {
@Schedule(hour="*/6", minute="0", second="0", persistent=false)
public void run() {
// Do your job here.
}
}
Вот и все. Дальнейшая настройка не требуется.
Обновление: судя по комментариям, вы используете Tomcat (6 или 7?). Чтобы запустить поток во время запуска веб-приложения, который запускает задачу каждые 6 часов, используйте пример, приведенный в ответ перед ссылкой и внесите следующие изменения в scheduleAtFixedRate()
scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);
Класс UpdateSubscriptions
должен реализовать Runnable
и фактическая работа должна быть выполнена в run()
метод, который вы @Override
< /a>, как в примере в связанном ответе.
scheduleAtFixedRate()
. Я обновил ответ примером, который запускает экземпляр UpdateSubscriptions
каждые 6 часов.
- person BalusC; 19.03.2011