一、什么是任务调度?
用于实现软件开发过程中需要定时执行或者重复周期执行的任务(方法|功能)。
二、任务调度的实现方法
- 数据库:使用触发器存储过程
- java:
1.JDK自带的 Timer计时器 | TimerTask任务对象 本篇博客详细说下这个方法
2 spring提供的quartz子框架 (请看下篇博客)
三、使用timer计时器实现
package com.etoak.util;
import java.util.Timer;
import java.util.TimerTask;
/**
* 1 定义一个任务对象
* JDK - 任务对象需要继承TimerTask
* 2 通过Timer计时器控制任务对象及其内容的执行(时间、周期)
* 3 Timer开启的时间 - 容器启动时
* 4 web容器注册监听器 - ServletContextListener
*/
public class DataBackup extends TimerTask{
private static int count = 0;
private static Timer timer ;
// 构造器 注入
public DataBackup(Timer timer){
this.timer = timer;
}
// setter注入
public void setTimer(Timer timer){
this.timer = timer;
}
@Override
public void run() {
// 描述当前任务对象需要执行的任务内容
System.out.println("连接数据库将表结构和数据备份到本地sql文件");
count++;
if(count==10) timer.cancel();
}
}
package com.etoak.util;
import java.util.Date;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class TimerListener implements ServletContextListener{
private static Timer timer ;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("web容器关闭了");
timer.cancel();
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("web容器启动了");
/**
* 准备Timer计时器
*/
timer = new Timer();
System.out.println("计时器处于准备工作,开始为任务内容的执行分配时间");
DataBackup backup = new DataBackup(timer);
backup.setTimer(timer);
/**
* 1 schedule(TimerTask task, Date time)
* 在time指定的时间执行task指向的内容
*/
//timer.schedule(backup, new Date(115,8,10,9,39,0));
/**
* 2 schedule(TimerTask task, Date firstTime, long period)
* 在firstTimer指定的时间开始执行,每隔period毫秒重复周期执行
*/
//timer.schedule(backup, new Date(115,8,10,9,46,0) , 2000);
/**
* 3 schedule(TimerTask task, long delay)
* 计时器启动之后,延迟delay毫秒开始执行任务内容
*/
//timer.schedule(backup, 5000);
/**
* 4 schedule(TimerTask task, long delay, long period)
* 计时器启动之后,延迟delay毫秒开始执行,每隔period毫秒重复周期执行
*/
//timer.schedule(backup, 5000, 2000);
/**
* 1 每天的早上九点触发一次任务 [向客户端推送消息提醒]
* 2 每个星期六的凌晨3点触发一次任务 [备份数据]
* 3 每隔1分钟执行一次任务,当执行完10次时,终止执行
*/
//1 timer.schedule(backup, new Date(115,8,11,9,0,0), 24*60*60*1000);
//2 timer.schedule(backup, new Date(115,8,12,3,0,0), 7*24*60*60*1000);
timer.schedule(backup, 0 , 60*1000);
}
}
xml中注册监听器:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<listener>
<listener-class>com.etoak.util.TimerListener</listener-class>
</listener>
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>