Quartz 介绍

任务调度器框架。

public class QuartzTest{
Public static void main(String[] args){
try{
//创建scheduler
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//定义一个Trigger
Trigger trigger = newTrigger().withIdentity(“trigger1”,”group1”)
.startNow() //一旦加入scheduler 立即生效
.withSchedule(simpleSchedule()) //使用SimpleTrigger
.repeatForever())//一直执行
.build();

//定义一个JobDetail
JobDetail job = newJob(HelloQuartz.class) //定义Job类为HelloQuartz类,这是真正的执行逻辑所在
.withIdentity(“job1”,”group1”)//定义name/group
.usingJobData(“name”,”quartz”)//定义属性
.build();

//启动之
Scheduler.start();

//运行一段时间后关闭
Thread.sleep(10000);
scheduler.shutdown(true);
}catch(Exception e){
e.printStackTrace();
}
}
}

public class HelloQuartz implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException{
JobDetail detail = context.getJobDetail();
String name = detail.getJobDataMap().getString(“name”);
System.out.println(“ say hello to ”+name+” at ”+new Date());
}
}
Scheduler:调度器。所有的调度都由它控制。
Trigger:定义触发的条件。类型是SimpleTrigger 每隔1秒执行一次
JobDetail & Job: JobDetail定义的是任务数据,而真正的执行逻辑是在Job中,例子中HelloQuartz。为什么设计成JobDetail + Job,不直接使用Job?这是因为任务有可能并发执行。如果Scheduler直接使用Job 就会存在对同一个Job实例并发访问的问题,而JobDetail & Job方式,sheduler每次执行,都会根据JobDetail创建一个新的Job实例这样可以规避并发访问的问题。
JobDetail jobDetail = new JobDetailImpl(“jobDetail”,”group1”,HelloQuartz.class);
JobDetail.getJobDataMap().put(“name”,”quartz”);

SimpleTriggerImpl trigger = new SimpleTriggerImpl(“trigger1”,”group1”);
trigger.setStartTime(new Date());
trigger.setRepeatInterval(1);
trigger.setRepeatCount(-1);

Quartz API
Quzrtz API的关键接口是
Scheduler -与调度程序交互的主要API。
Job -由调度程序执行的组件实现接口
JobDetail -用于定义作业的实例。
Trigger(即触发器) -定义执行给定作业的计划的组件
JobBuilder -用于定义/构建JobDetail实例,用于定义作业的实例。
TriggerBuilder -用于定义/构建触发器实例。

猜你喜欢

转载自blog.csdn.net/lanselianyu/article/details/89516471
今日推荐