Java EEタイマ


Java.tuil.TimerTaskを継承するタイミングタスククラスを書き、run()メソッドを書き換え、このメソッドでタスクビジネスコードを実現します.
package com.gao.timertask;

import java.util.TimerTask;

public class MyTimerTask extends TimerTask {

    public MyTimerTask() {}
    
    @Override
    public void run() {
        //          
    }

}

タイマー管理クラス、start()メソッドを書いてタイマーを起動し、タスクの実行間隔をカスタマイズし、タイミングタスクを追加します.
package com.gao.timertask;

import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class TimerManager {
    /**
     *        
     */
    private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;

    private int hour = 2;
    private int minute = 0;
    private int second = 0;
    private MyTimerTask timerTask;
   
    public TimerManager() {}

    public int getHour() {
        return hour;
    }

    public void setHour(int hour) {
        this.hour = hour;
    }

    public int getMinute() {
        return minute;
    }

    public void setMinute(int minute) {
        this.minute = minute;
    }

    public int getSecond() {
        return second;
    }

    public void setSecond(int second) {
        this.second = second;
    }
    
    public MyTimerTask getTimerTask() {
        return timerTask;
    }
    
    public void setTimerTask(MyTimerTask timerTask) {
        this.timerTask = timerTask;
    }

    //        
    public Date addDay(Date date, int num) {
        Calendar startDT = Calendar.getInstance();
        startDT.setTime(date);
        startDT.add(Calendar.DAY_OF_MONTH, num);
        return startDT.getTime();
    }
    
    /**
     *      
     */
    public void start()  {
        Calendar calendar = Calendar.getInstance();

        calendar.set(Calendar.HOUR_OF_DAY, hour);
        calendar.set(Calendar.MINUTE, minute);
        calendar.set(Calendar.SECOND, second);

        Date date=calendar.getTime(); //            

        //                       
        //                     ,             。      ,       。
        if (date.before(new Date())) {
            date = this.addDay(date, 1);
        }
        Timer timer = new Timer();

        //                          。
        timer.schedule(timerTask, date,PERIOD_DAY);
    }
}

Listenerを使用してタイマーを起動します.
package com.gao.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.gao.timertask.TimerManager;

public class MyTimerTaskListener implements ServletContextListener {
    
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        WebApplicationContext context = WebApplicationContextUtils.
                getRequiredWebApplicationContext(sce.getServletContext()); 
        TimerManager timerManager = (TimerManager) context.getBean("timerManager"); 
        timerManager.start();//        
    }

}