今天我们要设置定时任务,用JavaWeb的方式实现。通过网上搜寻资料发现,这个定时任务的实现使用Spring框架比较简单,当然也可以用监听器注入配合Timer的方法实现,这里我们讲的是后者的实现方法。
一 创建监听器类
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* 能让项目初始化的时候,就去将此定时程序跑起来,可以使用监听器,但是要在web.xml文件中配置对应的监听器
* @author hao
*/
public class CarTimerTaskListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
new TimerManager();
}
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
}
二 创建定时任务类
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
/**
* java定时任务,每天定时执行任务
* @author hao
*
*/
public class TimerManager {
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000; //24小时执行一次
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/*** 定制每日07:00执行方法 ***/
calendar.set(Calendar.HOUR_OF_DAY, 07);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime();
//如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。循环执行的周期则以当前时间为准
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
System.out.println("定时任务制定的时间为:"+date);
Timer timer = new Timer();
CarTimerTask task = new CarTimerTask();
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task,date,PERIOD_DAY);
}
//增加几天
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}
三 创建TimerTask类
/**
* 具体的任务类
* @author hao
*/
public class CarTimerTask extends TimerTask{
public void run() {
System.out.println("----开始执行任务--------------时间是:"+Utils.GetNowDate());
//一些具体的任务逻辑
SendEmail.Send("要发的邮件内容");
SendMessage.Send("111111111", "短信内容");
}
}
四 配置web.xml文件
<listener>
<listener-class>com.bao.timer.CarTimerTaskListener</listener-class>
</listener>
之后运行项目即可,程序会自动按照指定时间运行,实测代码没有bug。不过后期整合就 难说了。
这个系列短时间内暂且更新到这里,后期更新完SSM框架后,应该...会重构此项目,改的更好更自动化,暂且立个flag,回见啦,(* ̄rǒ ̄)
相关知识拓展链接:
https://www.cnblogs.com/dcncy/p/8205065.html
https://www.cnblogs.com/rese-t/p/7886651.html
https://www.cnblogs.com/eleven258/p/9671296.html
https://blog.csdn.net/comeonyangzi/article/details/70145190