Я планирую запуск фоновой задачи с фиксированными интервалами, но, так как tomcat запускается в нескольких экземплярах (т. Е. При запуске нескольких серверов Apache; в моем случае - 3), тогда задача запускается 3 раза в каждом интервале.нравится запускать один раз (независимо от количества запущенных экземпляров Tomcat).
Я запускаю сервлет, загруженный при запуске (в web.xml), который инициирует мою задачу:
<servlet>
<servlet-name>OnInit</servlet-name>
<servlet-class>box.OnInit</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Класс OnInit инициирует один экземпляр этого класса:
public class BGTaskRefresh {
private static BGTaskRefresh refreshTaskFactory = null;
private final Timer timer = new Timer();
public BGTaskRefresh() {}
public static void init()
{
if( refreshTaskFactory == null )
{
refreshTaskFactory = new BGTaskRefresh();
refreshTaskFactory.start();
}
}
public void start()
{
timer.schedule(
new TimerTask()
{
public void run()
{
boxService box = new boxService();
box.refreshMethod();
}
},
5 * 60 * 1000, // 5-Min Delay for first run
60 * 60 * 1000); // 60-Mins (Interval between 2 runs)
}
}