在Quartz框架提供了JobListener接口,可在任务执行前、任务被拒绝及任务执行完成后实现对任务的拦截,该接口的声明如下:

public interface JobListener {

    /**返回监听器名*/
String getName(); /**任务执行前对任务拦截*/
void jobToBeExecuted(JobExecutionContext context); /**任务被否决对任务拦截*/
void jobExecutionVetoed(JobExecutionContext context); /**任务执行完成对任务进行拦截*/
void jobWasExecuted(JobExecutionContext context,JobExecutionException jobException); }

下面简单实现了一个JobListener监听任务执行时间

public class SimpleJobListener implements JobListener {

    private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    @Override
public String getName() {
return getClass().getSimpleName();
} /**
* 任务执行前被调用[任务执行加入任务提交时间]
* */
public void jobToBeExecuted(JobExecutionContext context) {
String job = context.getJobDetail().getJobClass().getSimpleName();
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
long start = System.currentTimeMillis();
String date = SDF.format(new Date());
jobDataMap.put("time", start);
jobDataMap.put("date", date);
System.out.println("[" + job + "]在[" + date + "]加入Quartz~~");
} @Override
public void jobExecutionVetoed(JobExecutionContext context) {
String job = context.getJobDetail().getJobClass().getSimpleName();
System.out.println("[" + job + "]在[" + SDF.format(new Date()) + "]被Quartz否决~~");
} @Override
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
String job = context.getJobDetail().getJobClass().getSimpleName();
JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
long start = jobDataMap.getLong("time");
String date = jobDataMap.getString("date");
System.out.println("[" + job + "]在[" + date + "]添加,[" + SDF.format(new Date()) +
"]执行完成,耗时[" + (System.currentTimeMillis() - start) + "] ms");
} }

任务执行前加入JobListener

public class SchedulerDemo {

	private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	private static SchedulerFactory schedulerFactory ;

	static {
try {
Properties props = new Properties();
props.load(SchedulerDemo.class.getResourceAsStream("quartz.properties"));
schedulerFactory = new StdSchedulerFactory(props);
} catch (Exception e) {
System.out.println("[StdSchedulerFactory] init error");
}
} public static class HelloQuartzJob implements Job { @Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello Quartz! - executing its Job at [" + SDF.format(new Date()) + "] by [" + context.getTrigger().getDescription() + "]");
} } public String formatJobName(Trigger trigger , String name) {
return trigger.getClass().getSimpleName() + "_" + name + "_" + System.currentTimeMillis();
} public String formatTriggerName(Class<? extends Trigger> clazz) {
return clazz.getSimpleName() + "_" + System.currentTimeMillis();
} public void addJobListenerToJob(Scheduler scheduler, JobListener listener, Matcher<JobKey> matcher) throws Exception {
scheduler.getListenerManager().addJobListener(listener, matcher);
} /**
* JobDetail的构造通过JobBuilder构建,JobBuilder在内部调用JobDetail的实现类JobDetailImpl
* */
public void run(Trigger trigger) throws SchedulerException {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
String jobName = formatJobName(trigger,"HelloQuartz");
String jobGroup = "demo";
JobDetail jobDetail = JobBuilder.newJob(HelloQuartzJob.class)
.withIdentity(jobName, jobGroup)
.build();
/**添加监听器*/
Matcher<JobKey> matcher = KeyMatcher.keyEquals(new JobKey(jobName,jobGroup));
addJobListenerToJob(scheduler, new SimpleJobListener(), matcher);
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
} catch (Exception e) {
System.out.println("Quartz运行异常[" + e.getMessage() + "]");
} } /**
* Trigger的构造通过TriggerBuilder创建
* */
public Trigger getSimpleTrigger() {
SimpleTrigger simpleTrigger = (SimpleTrigger) TriggerBuilder.newTrigger()
.withIdentity(formatTriggerName(SimpleTrigger.class), "demo")
.withDescription("SimpleTrigger")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(10)
.withRepeatCount(5))
.build();
return simpleTrigger; } public static void main(String []args) throws SchedulerException {
SchedulerDemo schedulerDemo = new SchedulerDemo();
schedulerDemo.run(schedulerDemo.getSimpleTrigger());
} }

  

最新文章

  1. 你真的会玩SQL吗?查询指定节点及其所有父节点的方法
  2. jQuery-1.9.1源码分析系列(九) CSS操作
  3. CRLF line terminators导致shell脚本报错:command not found
  4. [platform]Device和Driver注册顺序
  5. DispatcherHelper
  6. [Android Studio] 按钮学习
  7. strstr()
  8. MyISAM表杂记实验
  9. [vim]VIM快捷键整理
  10. 女性社区TOP10
  11. C#DataGridView 美化
  12. Linux系统监视资源与进程管理
  13. Golang做的验证码(2)
  14. Ceph Jewel 10.2.3 环境部署
  15. redis5--set的操作
  16. static的加载先后顺序
  17. python note 15 正则表达式
  18. Java8新特性(待更新...)
  19. NAND Flash底层原理,SLC MLC TLC比较【转】
  20. Centos7.5 安装高版本Cmake 3.6.2

热门文章

  1. 我的一次安装oracle的过程
  2. NumPy、SciPy 等Python包在Windows下的whl安装包下载
  3. laravel使用redis做缓存的方法
  4. AC日记——[Noi2011]阿狸的打字机 bzoj 2434
  5. python2和python3中的编码问题
  6. mysql table status
  7. SecureCRT的安装、介绍、简单操作
  8. 非负整数可重集去重&amp;排序+获得可重集的全排列的几种方法
  9. [CF407E]k-d-sequence
  10. 【前缀和】【前缀MAX】洛谷 P1351 NOIP2014提高组 day1 T2 联合权值