java定时任务以及Spring使用Quartz调度器执行定时任务

java下的java.util.Timer中类可以实现定时执行任务的执行:

如:让任务立即执行,每隔1s循环执行一次

public class TimerClass {

public static void main(String[] args) {

Timer timer = new Timer();

TimerTask task = new TimerTask() {
int i = 0;

@Override
public void run() {
i += 1;
System.out.println("第" + i + "次执行");
}
};
// 第二个参数,表示多长时间开始执行调度任务,
// 第三个参数间隔多长时间执行
timer.schedule(task, 0, 1000);

}

}

  • Timer缺陷:
    • Timer对调度的支持是基于绝对时间的,而不是相对时间,所以它对系统时间的改变非常敏感。
    • Timer线程是不会捕获异常的,如果TimerTask抛出的了未检查异常则会导致Timer线程终止,同时Timer也不会重新恢复线程的执行,他会错误的认为整个Timer线程都会取消。

缺陷:http://blog.csdn.net/chenssy/article/details/32703499

使用Executors管理线程,调用newScheduledThreadPool()方法来执行重复任务

http://www.jianshu.com/p/a898655b787a

定时任务在Spring中的应用

一、Spring3.0以后提供了基于Spring的轻量级时间调度框架,可定时执行一些任务

二、Spring中使用Quartz框架来做调度任务:主要讲述Quartz在Spring中的用法。

  • 从任务调度的触发时机来分,这里主要是针对作业使用的触发器,主要有以下两种:

    • 每隔指定时间则触发一次,在Quartz中对应的触发器为:org.springframework.scheduling.quartz.SimpleTriggerBean
    • 每到指定时间则触发一次,在Quartz中对应的调度器为:org.springframework.scheduling.quartz.CronTriggerBean
  • 从作业类的继承方式来讲,可以分为两类:

    • 作业类需要继承自特定的作业类基类,如Quartz中需要继承自org.springframework.scheduling.quartz.QuartzJobBean;java.util.Timer中需要继承自java.util.TimerTask。
    • 作业类即普通的java类,不需要继承自任何基类。

主要说明作业类不继承特定基类的方式。

Spring能够支持这种方式,归功于两个类:
org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean
org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
这两个类分别对应spring支持的两种实现任务调度的方式,即前文提到到java自带的timer task方式和Quartz方式。这里我只写MethodInvokingJobDetailFactoryBean的用法,使用该类的好处是,我们的任务类不再需要继承自任何类,而是普通的pojo。

  • maven依赖


    org.quartz-scheduler
    quartz
    2.2.2

  • 创建Job类

    public class ShowTimeJob {

    private void showTime() {

    System.out.println("每秒执行:" + new Date());

    }

    }

  • 在ApplicationContext.xml中配置作业类








  • 配置触发器:Quartz提供两种触发器形式,cron和simple两种。













  • 配置工厂类,管理









使用cron的时候,可以使用cron表达式来对配置执行的时间,次数等,cron表达式生成器网址:http://cron.qqe2.com

其他更多可以参考:http://gong1208.iteye.com/blog/1773177

Demo:https://github.com/esileme/MybatisPager.git

posted @ 2017-09-22 22:49  esileme  阅读(414)  评论(0)    收藏  举报