啟動Timer的容器類:
public class TMServlet extends HttpServlet {
/**
* @category 初始化方法,通過此方法配置定時啟動屬性,以及啟動服務
*/
public void init(ServletConfig context) throws ServletException {
super.init(context);
// 掃描周期,以毫秒計,為20分鐘
//long scanPeriod = 1200000l;
long scanPeriod = 60000l;
try {
// 啟動服務
new Timer().schedule(
new TMServiceTask(context.getServletContext()), 0, scanPeriod);
} catch (RuntimeException e) {
e.printStackTrace();
log.error(e);
}
}
TimerTask的執行類:
public class TMServiceTask extends TimerTask {
private SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd, HH:mm:ss");
public TMServiceTask(ServletContext servletContext) {}
@Override
public void run() {
System.out.println(sdf.format(new Date()));
System.out.println("啟動");
// 要做的操作
System.out.println("推數結束");
throw e;
==========================
補充:weblogic下,使用console來啟停服務時,可能導緻前一個servlet沒有完全停止的情況下啟動了一個新的servlet,進而啟動多個timer、運作多個定時任務的線程。如果沒有實作做線程安全的控制,這種情況會導緻嚴重的資料同步問題。
建議使用spring的schedule-job。至少目前來看沒有定時任務不能關閉的問題。
本文轉自 斯然在天邊 51CTO部落格,原文連結:http://blog.51cto.com/winters1224/798987,如需轉載請自行聯系原作者