日期:2014-05-20 浏览次数:21204 次
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);
}
}
------解决方案--------------------
给你看个Timer的例子,tomcat启动就开始定时
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)安排指定的任务在指定的延迟后开始进行重复的固定速率执行.
}
------解决方案--------------------
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("指定任务执行结束"); } } } }