Quartz中核心概念
Scheduled:调度器,所有的调度都是由他控制的,是Quartz的大脑,所有任务都是由他来进行管理
Job:任务,想定时、定期执行的事情(定义业务逻辑)
JobDetail:基于Job,进一步的封装。其中关联一个Job,并未Job指定更为详细的属性,比如标识等。
Trigger:触发器,可以指定给某个任务,指定任务的触发机制。
Quartz整合数据库(调度器直接Autowired注入就行了 Scheduler)
表设计(忽略审计字段)
id 主键
job_class 任务类全类名
job_name 定时任务名称(英文)
job_group 定时任务所属组 (英文)
job_text 任务信息(放入JobDataMap中,通过JobExecutionContext.getMergedJobDataMap()去进行获取)
cron_expression (cron表达式)
enable (是否启用)
查询:查询Quartz表中所有数据
删除:逻辑删除数据库中定时任务记录,暂停定时任务scheduler,pauseTrigger(new TriggerKey(jobName, jobGroup)),移除触发器中任务scheduler.unscheduleJob(new TriggerKey(jobName, jobGroup)),调度器中删除此任务 scheduler.deleteJob(new JobKey(jobName, jobGroup))
新增:创建对应entity实体对象,查找对应任务名称和组名数据库中是否已经存在,不存在则进行插入
修改:参考上面改动下即可
开启任务:
JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(jobClass))
.withIdentity(jobName, jobGroup)
.usingJobData("data", jobText)
.build();
//创建一次性及时触发器用于程序启动后的初始化,只执行一次
trigger = TriggerBuilder.newTrigger()
//开始时间为当前时间
.startNow()
.withIdentity("init" + jobName, jobGroup)
.build();
//创建触发器,执行任务执行时间
trigger = TriggerBuilder.newTrigger()
//开始时间为当前时间
.withIdentity("cron" + jobName, jobGroup)
.withSchedule(CronScheduleBuilder.cronSchedule(cron))
.forJob(jobDetail)
.build();
//使用任务调度器进行任务调度
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();