当前位置: 代码迷 >> Java相关 >> java定时程序的实现,不用Spring解决方案
  详细解决方案

java定时程序的实现,不用Spring解决方案

热度:3388   发布时间:2013-02-25 21:51:47.0
java定时程序的实现,不用Spring
java定时程序的实现,不用Spring

------解决方案--------------------------------------------------------
Timer,线程都可以
for exampe

Java code
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启动就开始定时

Java code
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)安排指定的任务在指定的延迟后开始进行重复的固定速率执行.}
------解决方案--------------------------------------------------------
Java code
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("指定任务执行结束");            }        }    }}
  相关解决方案