Quartz2.0以上版本的单机和集群

  Quartz是一个完全由java编写的开源作业调度框架,能实现业务的定时调度。Quartz主要有三个核心调度器、任务和触发器:

①任务-JobDetail:Quartz在任务调度的时候,需要创建一个任务实例,JobDetail正是承担这个角色。在Quartz2.0以前的版本中,创建一个任务通过new JobDetail(String jobName, String gruop, Class jobCLass)这个方法来创建,在2.0之后的版本中通过JobBuilder来创建任务。Job接口中只有一个方法void execute(JobExecutionContext context) throws JobExecutionException,因此在任务调度时,只需要实现execute方法就可以了,使用起来很方便。

②触发器-Trigger:定义Job的执行时间、次数等信息,有SimpleTrigger和CronTrigger两种类型。当你需要的是一次性的调度,或者你需要在指定的时间激活某个任务并执行N次,设置每次任务执行的间隔时间T。那此时使用SimpleTrigger将是非常方便的。如果你想在每周的周一7:00或者每月的第2,3天实现任务调度,这时候就需要用到CronTrigger,CronTrigger能够提供复杂的触发器表达式满足我们的需求。同时需要提到的一点是Quartz还提供很多日期的实现类DateBuilder等,在实际使用中很方便。

③调度器-Scheduler:Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。

Spring3.2.11与Quartz2.2.1整合时内存泄漏问题解决 

Spring配置Quartz任务调度框架教程 

Quartz深入浅出

Quartz1.6有状态JOB碰到的棘手问题既解决方案

Spring 3整合Quartz 2实现定时任务

Java项目中定时任务之Quartz的应用

Spring 3 调度器示例 —— JDK 定时器和 Quartz 展示

Quartz框架 实现任务调度

Spring Quartz定时任务

2.搭建Quartz工程

①创建一个新工程

  新建文件lib作为外部jar包,Quartz最新版本通过官网可以下载导入你下载的quartz包,新建package为com.example.singleQuartz,里面就两个简单的类SingleQuartzJob和SingleQuartzServer。SingleQuartzJob定义Job的实现类,SingleQuartzServer任务调度服务。

Quartz2.0以上版本的单机和集群

②SingleQuartzJob.java定义Job的实现类

package com.example.singleQuartz; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import java.util.Date; /** * Created by XuHui on 2016/12/22. */ public class SingleQuartzJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.print("Hello, Quartz! - executing its JOB at "+ new Date() + " by " + context.getTrigger().getJobKey() + "\n"); } }

③SingleQuartzServer.java实现任务调度

package com.example.singleQuartz; import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; import java.util.Date; import java.util.concurrent.TimeUnit; /** * Created by XuHui on 2016/12/22. */ public class SingleQuartzServer { public static void main(String[] args) throws SchedulerException { /* 获取Scheduler实例 */ SchedulerFactory factory = new StdSchedulerFactory(); Scheduler scheduler = factory.getScheduler(); /* 启动调度器 */ scheduler.start(); /* 任务:withIdentity(String name, String group),其中groupName可以自己定义,也可以用Scheduler提供的DEFAULT_GROUP。 这里要求同组里面的jobName不能相同*/ JobDetail jobDetail = JobBuilder.newJob(SingleQuartzJob.class) .withIdentity("job", Scheduler.DEFAULT_GROUP) .build(); /*触发器:SimpleTrigger和CronTrigger。实现的功能是:接下来30s后执行job,以后每个10s执行一次,重复10次,一共执行11次。 nextGivenSecondDate(null, 30)距离现在时间30s之后执行job,此处null可写作new Date(),可自行在api查看源码实现 */ Date startTime = DateBuilder.nextGivenSecondDate(null, 30); SimpleTrigger simpleTrigger = TriggerBuilder.newTrigger() .withIdentity("trigger", Scheduler.DEFAULT_GROUP) .startAt(startTime) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .withRepeatCount(10)) .forJob(jobDetail) .build(); /* 交由调度器调度Job */ scheduler.scheduleJob(jobDetail, simpleTrigger); /* 3分钟任务调度之后关闭调度器 */ try{ TimeUnit.MINUTES.sleep(3); } catch (Exception e) { e.printStackTrace(); } finally { scheduler.shutdown(); } } }

④执行任务调度

  执行run->main但是发现报错了。此时是少了两个个日志包,slf4j-api-1.7.22.jar和slf4j-simple-1.7.22.jar,我们只要添加slf4j包就可以了。

通过官网可以下载,找到这两个包放到lib下就可以了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/31516fa43c61552cf3a0ce71f1cb9275.html