博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC + quartz实现定时器(任务调度器)
阅读量:6409 次
发布时间:2019-06-23

本文共 6188 字,大约阅读时间需要 20 分钟。

首先我们要知道任务调度器(定时器)有几种,这边我会写三种

第一种是基于JDK的本身的一个定时器(优点:简单,缺点:满足不了复杂的需求)

package com.timer1;import java.util.Date;import java.util.TimerTask;/** * jdk自带的定时器   不需要引入任何的jar   * @author Administrator */public class JdkTimerTask extends TimerTask {    int a = 1;    @Override    public void run() {        System.out.println("我的定时任务    " + new Date() + "     " + a++ );    }}

测试类

package com.timer1;import java.util.Timer;public class TestTimerTask {    public static void main(String[] args) {        // 新建一个 timer         Timer t = new Timer("定时任务");        //  执行我们的定时任务   第一个参数是 定时任务对象    0 是立即开始   3000 每隔3秒钟执行一次        t.schedule(new JdkTimerTask(), 0 , 3000);    }}

 

 

 

第二种是基于 Quartz的纯代码去实现的,  需要下载Quartz的jar  ,而 jar的版本不一样实现的方式又不一样

以下代码是基于  quartz-all-1.6.1.jar 版本  和 quartz-2.2.3-distribution(quartz-2.2.3、quartz-jobs-2.2.3) 去实现两种方式的,两种只能选择一种。

package com.timer3;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * 定时任务 * @author Administrator */public class QuartzTimer implements Job {    int a = 1;        @Override    public void execute(JobExecutionContext arg0) throws JobExecutionException {        System.out.println("我的quartz定时任务" +  new Date() + "     " + a++);    }}

以下是测试方式(注:因为两种模式写在一起了 所以jar包导入可能不对,需要以引用的jar的版本为准)

package com.timer3;import java.text.ParseException;import java.util.Date;import org.quartz.CronExpression;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SimpleTrigger;import org.quartz.Trigger;import org.quartz.impl.StdSchedulerFactory;public class TestQuartzTimer {        public static void main(String[] args) throws SchedulerException, ParseException {        /**         * jar 版本  quartz-all-1.6.1.jar         */        //  新建一个定时任务处理类 jobDetail        //JobDetail jobDetail = new JobDetail("quartzTimer","quartzTimerGroup" , QuartzTimer.class);                // 创建定时器触发器        /*SimpleTrigger simpleTrigger = new SimpleTrigger("quartzTimerTrigger", "quartzTimerTriggerGroup");        //  什么时间点执行      new Date()立即启动        simpleTrigger.setStartTime(new Date());        // 执行多少次    10 次        simpleTrigger.setRepeatCount(10);        //  每隔多少秒执行一次   1000是代表1秒        simpleTrigger.setRepeatInterval(1000);*/                // 表达式的触发器   两个触发器只需要一个就好了。        /*CronTrigger cronTrigger = new CronTrigger("quartzTimerCronTrigger", "quartzTimerCronTriggerGroup");        // 新建一个表达式        CronExpression cronExpression = new CronExpression("0/5 32/1 0-23 * * ? *");        // 将表达式放入 触发器        cronTrigger.setCronExpression(cronExpression);                //  新建一个计划共工厂        StdSchedulerFactory stdSchedulerFactory = new StdSchedulerFactory();        //  获取到一个计划任务        Scheduler scheduler = stdSchedulerFactory.getScheduler();        //  将定时器任务处理类和触发器结合在一起        scheduler.scheduleJob(jobDetail, cronTrigger);        // 启动触发器        scheduler.start();*/                        //quartz 2.X版本以上做法 ++++++++++++++++++++++++++++++++++++++++++++++++        /**         * quartz-2.2.3-distribution(quartz-2.2.3、quartz-jobs-2.2.3)         */        // 通过 schedulerFactory 获取一个调度器        /*SchedulerFactory sf = new StdSchedulerFactory();        Scheduler sched = sf.getScheduler();        // 创建 jobDetail 实例,绑定 Job 实现类        // 指明 job 的名称,所在组的名称,以及绑定 job 类        JobDetail job = JobBuilder.newJob(QuartzTimer.class).withIdentity("job1", "group1").build();        // 定义调度触发规则        // SimpleTrigger,从当前时间的下 1 秒开始,每隔 1 秒执行 1 次,重复执行 2 次        Trigger trigger = TriggerBuilder.newTrigger()                // 指明 trigger 的 name 和 group                .withIdentity("trigger1", "group1")                // 从当前时间的下 1 秒开始执行,默认为立即开始执行(.startNow())                .startAt(DateBuilder.evenSecondDate(new Date()))                .withSchedule(SimpleScheduleBuilder.simpleSchedule()                        .withIntervalInSeconds(1) // 每隔 1 秒执行 1 次                        .withRepeatCount(2)) // 重复执行 2 次,一共执行 3 次                .build();        // corn 表达式,先立即执行一次,然后每隔 5 秒执行 1 次        Trigger trigger = TriggerBuilder.newTrigger()                .withIdentity("trigger1", "group1")                .withSchedule(CronScheduleBuilder.cronSchedule("*\/5 * * * * ?"))                .build();        // 把作业和触发器注册到任务调度中        sched.scheduleJob(job, trigger);        // 启动计划程序(实际上直到调度器已经启动才会开始运行)        sched.start();        // 等待 10 秒,使我们的 job 有机会执行        //Thread.sleep(10000);        // 等待作业执行完成时才关闭调度器        //sched.shutdown(true);        */    }}

springMVC +  Quartz 配置文件的两种实现方式实现 需要用(quartz-2.2.3-distribution(quartz-2.2.3、quartz-jobs-2.2.3)  jar包

第一种 需要继承QuartzJobBean

package com.timer4;import java.util.Date;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.quartz.SchedulerException;import org.quartz.spi.JobFactory;import org.quartz.spi.TriggerFiredBundle;import org.springframework.scheduling.quartz.QuartzJobBean;/** * 定时任务 * @author Administrator */public class QuartzTimer extends QuartzJobBean  {        @Override    protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException {        System.out.println("我的Spring管理quartz定时任务" +  new Date());            }}

spring中的配置方式

第二种不需要继承任何类

package com.timer4;import java.util.Date;public class QuartzTimer2 {    protected void execute()  {          System.out.println("我的Spring管理quartz定时任务2222" +  new Date());     }}

spring 中配置方式

 

Spring + SpringMVC + Quartz   jar下载地址:http://pan.baidu.com/s/1nuHIUvv   ,密码 :28ar

转载于:https://www.cnblogs.com/fpcbk/p/9820216.html

你可能感兴趣的文章
【后缀数组】
查看>>
图片缩放裁剪
查看>>
jquery ajax 回调函数的值alert出来[object Object] 解决方法
查看>>
JQuery选择器总结
查看>>
MySQL安装详解(V5.5 For Windows)
查看>>
Android单例模式
查看>>
Log4php 使用心得
查看>>
十三香_百度百科
查看>>
paip.网页右键复制菜单限制解除解决方案
查看>>
string.Format 格式化时间,货币
查看>>
Kerberos和NTLM - SQL Server
查看>>
记github上搭建独立域名的免费博客的方法过程
查看>>
Web设计之网页布局CSS技巧
查看>>
iOS key value coding kvc在接收json数据与 model封装中的使用
查看>>
Android 滑动效果入门篇(二)—— Gallery
查看>>
Revit二次开发示例:DesignOptions
查看>>
Entity Framework 系统约定配置
查看>>
优秀设计:纹理在网页设计中的20个应用示例
查看>>
C++ 关键字 explicit, export, mutable
查看>>
生成指定范围的一组随机数并求平均值
查看>>