JAVA的定时任务

时间:2021-11-20 07:53:08

1. 监听器

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

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

import com.suoya.upload.task.MyTask;

public class TaskListener implements ServletContextListener {
/**
* 每天的毫秒数 ,时间间隔一天
*/

public static final long PERIOD_DAY=24 * 60 * 60 * 1000;
/**
* 无延迟
*/

public static final long NO_DELAY = 0;
/**
* 定时器
*/

private Timer timer;
/**
* 在Web应用启动时初始化任务
*/

public void contextInitialized(ServletContextEvent event) {
//定义定时器
timer = new Timer("执行定时任务",true);
Calendar cal = Calendar.getInstance();
//每天定点执行
cal.set(Calendar.HOUR_OF_DAY,12);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
timer.schedule(new MyTask(),cal.getTime(), PERIOD_DAY);
}
/**
* 在Web应用结束时停止任务
*/

public void contextDestroyed(ServletContextEvent event) {
timer.cancel(); // 定时器销毁
}


}

2. 自定义定时任务

import java.util.TimerTask;

/**
* 自定义定时任务,web容器启动的时候启动
* @author sunt
* @dade 2017年4月27日下午3:45:07
* @version v1.0
*/

public class MyTask extends TimerTask {

private static boolean isRunning = false;
@Override
public void run() {
if (!isRunning) {
isRunning = true;
System.out.println("开始执行任务..."); // 开始任务
System.out.println("====================>开始定时调用业务逻辑功能...");
System.out.println("执行任务完成..."); // 任务完成
isRunning = false;
} else {
System.out.println("上一次任务执行还未结束..."); //上一次任务执行还未结束
}
}

}

3. web容器配置监听器

<!-- 监听器的配置 -->
<listener>
<listener-class>com.suoya.upload.linster.TaskListener</listener-class>
</listener>

4. 执行定时任务
MyTask 中run()方法调用定时逻辑的方法

//代表每天十二点执行一次
cal.set(Calendar.HOUR_OF_DAY,12);
cal.set(Calendar.MINUTE,0);
cal.set(Calendar.SECOND,0);
//设置其他执行时间修改对应的时分秒即可