您的位置:首页 > 其它

Quartz

2016-12-07 00:00 344 查看
今天突然想使用一下Quartz,就顺便记录一下下次用的时候就不用再找了。

什么是Quartz
Quartz是一个开源的作业调度框架,由java编写,在.NET平台为Quartz.Net,通过Quart可以快速完成任务调度的工作.

Quartz能干什么/应用场景
如网页游戏中挂机自动修炼如8个小时,人物相关数值进行成长,当使用某道具后,时间减少到4个小时,人物对应获得成长值.这其中就涉及到了Scheduler的操作,定时对人物进行更新属性操作,更改定时任务执行时间.
网页游戏中会大量涉及到Scheduler的操作,有兴趣的朋友可自行联想.比如:企业中如每天凌晨2点触发数据同步、发送Email等操作。

同类框架对比
TimeTask TimeTask在Quartz前还是显得过于简单、不完善,不能直接满足开发者的较为复杂的应用场景.

Maven资源

<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>


组件介绍:

JobDetail:任务的描述类 通过JobBuilder.newJob(PunchCardJob.class).withIdentity(jobKey).build();

Trigger:触发器 TriggerBuilder.newTrigger().withIdentity("dummyTriggerName", "group1")
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();

Scheduler:创建调度器 new StdSchedulerFactory().getScheduler();


测试代码:

package quartz;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.impl.matchers.KeyMatcher;

/**
* Created by sun on 2016/12/6.
*/
public class QuartzTest {
public static void main(String[] args) {
//创建一个JobDetail对象  同时设置任务名称和任务组名
JobKey jobKey = new JobKey("dummyJobName", "group1");
JobDetail job = JobBuilder.newJob(PunchCardJob.class).withIdentity(jobKey).build();

//触发器   设置触发器的名称和组名称   设置触发器的cron规则
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("dummyTriggerName", "group1")
//cron表达式  每五秒钟执行一次
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();

//创建调度器  通过标准调度工厂配置调度器
Scheduler scheduler = null;
try {
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.getListenerManager()
.addJobListener(new MyJobListener(), KeyMatcher.keyEquals(jobKey));

//启动调度器
scheduler.start();

//设置调度器的job详情和触发器
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}


package quartz;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import java.util.Date;

/**
* Created by sun on 2016/12/6.
*/
public class PunchCardJob implements Job {
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("======"+new Date());
throw new JobExecutionException("Testing Exception");
}
}


package quartz;

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;

/**
* Created by sun on 2016/12/7.
*/
public class MyJobListener implements JobListener {

public static final String LISTENER_NAME = "dummyJobListenerName";

public String getName() {
return LISTENER_NAME;
}

public void jobToBeExecuted(JobExecutionContext jobExecutionContext) {
System.out.println("定时任务执行之前。。。。");

}

public void jobExecutionVetoed(JobExecutionContext jobExecutionContext) {
System.out.println("异常的时候执行");

}

public void jobWasExecuted(JobExecutionContext jobExecutionContext, JobExecutionException e){
System.out.println("定时任务执行之后执行。。。。。。");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  定时器