欢迎使用CSDN-markdown编辑器

来源:互联网 发布:淘宝客怎么开通条件 编辑:程序博客网 时间:2024/06/10 02:06

Java 定时每天某个时间段执行任务(开发笔记)

在特殊的功能需求下,我们需要随着tomcat的启动定时执行一些任务。在开发当中需要每天检查用户退款申请,实现批量自动退款功能。

1、新建一个task,继承java的timerTask类,创建自己要执行的任务的代码块。

public class NFDFlightDataTimerTask extends TimerTask {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
public static String appId=”“;
HttpServletRequest request;
HttpServletResponse response;
@Override
public synchronized void run() {
try {
System.out.println(“开始”);
List list= new MyTask().getUserID();
synchronized(this) {
for (int a : list) {
try {
调用代码段
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Thread.sleep(5000);//等待微信返回退款结果在进行下一个用户退款申请

} }

} catch (Exception e) {
log.info(“————-解析信息发生异常————–”);
}
}

2、新建一个TimerManager类来制定执行计划;
public class TimerManager {
//时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager() {
Calendar calendar = Calendar.getInstance();
/* 定制每日执行批量退款方法 */
calendar.set(Calendar.HOUR_OF_DAY, 17);
calendar.set(Calendar.MINUTE, 10);
calendar.set(Calendar.SECOND, 0);
Date date=calendar.getTime(); //第一次执行定时任务的时间
//如果第一次执行定时任务的时间 小于 当前的时间
//此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
}
Timer timer = new Timer();
NFDFlightDataTimerTask task = new FDFlightDataTimerTask();
timer1.schedule(task1,date1,PERIOD_DAY);
//安排指定的任务在指定的时间开始进行重复的固定延迟执行。
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();
}
}

3、新建一个监听器监听tomcat启动,当启动时自动执行定时计划
public class NFDFlightDataTaskListener implements ServletContextListener {
private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
public void contextInitialized(ServletContextEvent event) {
log.info(“次数a”);
new TimerManager();
}
public void contextDestroyed(ServletContextEvent event) {
}

}
4、进行web.xml配置Listener ,就完成了一个定时执行任务。

com.test.NFDFlightDataTaskListener

原创粉丝点击