【发布时间】:2012-03-05 12:26:00
【问题描述】:
我正在安排后台任务以固定间隔运行,但由于 tomcat 在多个实例中运行(即多个启动 Apache 服务器;在我的情况下为 3 个),那么该任务在每个间隔中运行 3 次。我会喜欢它运行一次(无论运行多少个 Tomcat 实例)。
我正在运行一个在启动时加载的 servlet(在 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)
}
}
【问题讨论】:
标签: java multithreading task