日期:2014-05-20 浏览次数:21041 次
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("指定任务执行结束"); } } } }