quartz任务调度框架出错及排错

简述

初学quartz,按照IBM基于 Quartz 开发企业级任务调度应用一步一步学习的.遇到的问题在这里一一记录,可以给以后学习的人少走一些弯路.

当前项目中使用的quartz版本为:quartz-2.2.2,在该文章中有一些不兼容问题简单陈述

版本兼容

1. StatefulJob 过期

请使用@DisallowConcurrentExecution或者@PersistJobDataAfterExecution 注解的方式同时实现Job接口

2.JobDetail不支持构造函数

通过以下代码构建JobDetail

JobBuilder job = JobBuilder.newJob(TestJob.class);
JobDetail jobDetail = job.withIdentity(“sampleJob”, “sampleGroup”).build();

3.DailyTimeIntervalTrigger类被DailyTimeIntervalTriggerImpl替代

使用DailyTimeIntervalTriggerImpl

4.IntervalUnit不再是DailyTimeIntervalTrigger的属性

可以直接使用IntervalUnit.SECOND类似方法直接访问静态属性

5.deleteJob只有两个方法传入jobkey 或者jobkey列表

jobkey可以通过jobDetail直接getKey()获取,然后使用Scheduler对象的deleteJob方法删除

 

代码运行中的异常

异常1

Scheduler won't start - java.lang.NoClassDefFoundError:com/mchange/v2/c3p0/ComboPooledDataSource

错误分析:找不到类com/mchange/v2/c3p0/ComboPooledDataSource

解决:在下载的quartz解压文件夹中找到\quartz\lib\c3p0-*.jar 添加到class path中

参考:http://forums.terracotta.org/forums/posts/list/5268.page

 

异常2

插入数据postgresql报错:Caused by: org.quartz.JobPersistenceException: Couldn't retrieve trigger: 不良的类型值 long : \x [See nested exception: org.postgresql.util.PSQLException: 不良的类型值 long : \x]

错误分析:数据库不兼容(其实我也不太清楚,没挖那么深)

解决:在配置文件中把org.quartz.jobStore.driverDelegateClass的org.quartz.impl.jdbcjobstore.StdJDBCDelegate修改为postgresql专用的 org.quartz.impl.jdbcjobstore.PostgreSQLDelegate驱动类文件

参考:https://jira.talendforge.org/browse/TDI-27463

https://quartz-scheduler.org/documentation/quartz-2.2.x/configuration/ConfigJobStoreCMT

 

持续更新…



二月 24th, 2016 by