51,409
社区成员
发帖
与我相关
我的任务
分享<!-- 定时器监听 -->
<listener>
<listener-class>com.pro_crm.tools.ContextLister</listener-class>
</listener>package com.pro_crm.tools;
import java.util.Calendar;
import java.util.TimerTask;
import javax.servlet.ServletContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import com.pro_crm.client.dao.ClienDao;
import com.pro_crm.client.dao.LostDao;
import com.pro_crm.client.dao.OrderDao;
public class TimeLister extends TimerTask {
// 时钟点,想实现调度任务每24小时(晚上12点,也即0点)被执行一次,任务开始时间
private static final int C_SCHEDULE_HOUR = 2;
// 是否正在执行(标志) 防止24小时执行下来,任务还未执行完,避免第二次又被调度以引起执行冲突
private static boolean isRuning = false;
// 记录Servlet日志
private ServletContext context = null;
public TimeLister(ServletContext context) {
this.context = context;
}
public void run() {
Calendar time = Calendar.getInstance();
if (!isRuning) {
if (C_SCHEDULE_HOUR == time.get(Calendar.HOUR_OF_DAY)) {
isRuning = true;
// 获取当前系统路径
String path = context.getRealPath("/");
try {
// 加载Spring
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(
path + "/WEB-INF/applicationContext.xml");
// 得到接口
LostDao dao = (LostDao) applicationContext
.getBean("lostDao");
OrderDao orderservice = (OrderDao) applicationContext
.getBean("orderDao");
ClienDao clientdao = (ClienDao) applicationContext
.getBean("clienDao");
// 调用实现方法
dao.allLostInfo(orderservice, clientdao);
} catch (Exception e) {
e.printStackTrace();
}
isRuning = false;
context.log("指定任务执行结束");
}
}
}
}
package com.pro_crm.tools;
import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextLister implements ServletContextListener {
private Timer timer = null;
// 定时器开始
public void contextInitialized(ServletContextEvent event) {
// 设置时间 星期日 5:30 10s
// Date start = new Date();
// start.setHours(2);
// start.setMinutes(30);
// start.setSeconds(10);
// start.toLocaleString();
timer = new Timer(true);
event.getServletContext().log("定时器开始启动");
/*
* @parmer: TimeLister是自定义需要被调度的执行任务(要被定时执行的任务),继承java.util.TimerTask
*
* @parmer: 中间参数0表示无延迟 @parmer: 第三个参数表示每分钟(即601000毫秒)被触发一次
*/
timer.schedule(new TimeLister(event.getServletContext()), 0, 1000 * 60
* 60 * 24 * 7);
event.getServletContext().log("已经将定时任务添加到任务调度表中");
}
// 定时器销毁
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
// 定时调度器
// (1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。
// (2)Timer.schedule(TimerTask task,Date firstTime ,long
// period)安排指定的任务在指定的时间开始进行重复的固定延迟执行.
// (3)Timer.schedule(TimerTask task,long delay)安排在指定延迟后执行指定的任务.
// (4)Timer.schedule(TimerTask task,long delay,long
// period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行.
// (5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long
// period)安排指定的任务在指定的时间开始进行重复的固定速率执行.
// (6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long
// period)安排指定的任务在指定的延迟后开始进行重复的固定速率执行.
}
import java.util.*;
class Test {
public static void main(String[] args) {
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
Calendar c = Calendar.getInstance();
System.out.printf("%tF %tT\n", c.getTime(), c.getTime());
}
}, 0, 1000);
}
}