Ответ 1
Чтобы начать, я бы не использовал JSP для этого. Там это не для.
Когда вы работаете на Java EE 5, используйте для этого API-интерфейсы, связанные с контейнером. Дополнительная информация зависит от используемого вами контейнера. JBoss AS 5, например, корабли с кварцем из коробки. Или, когда вы используете фреймворк поверх 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?). Чтобы запустить поток во время запуска webapp, который запускает задачу каждые 6 часов, используйте пример, представленный в перед отбором ответа, и внесите следующие изменения в scheduleAtFixedRate()
метод
scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);
Класс UpdateSubscriptions
должен реализовать Runnable
, и фактическое задание должно выполняться в run()
, который вы @Override
, как в примере в связанный ответ.