首先创建数据库表保存执行任务信息
创建sql(mysql)
-- ----------------------------
-- Table structure for tinycms_quartz_job
-- ----------------------------
DROP TABLE IF EXISTS `tinycms_quartz_job`;
CREATE TABLE `tinycms_quartz_job` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`JOB_NAME` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
`OLD_JOB_NAME` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
`JOB_GROUP` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
`OLD_JOB_GROUP` varchar(20) COLLATE utf8_sinhala_ci DEFAULT NULL,
`DESCRIPTION` varchar(255) COLLATE utf8_sinhala_ci DEFAULT NULL,
`CRON_EXPRESSION` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
`JOB_CLASS_NAME` varchar(255) COLLATE utf8_sinhala_ci DEFAULT NULL,
`STATUS` int(10) DEFAULT NULL,
`CREATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`CREATE_USER` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
`UPDATE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`UPDATE_USER` varchar(100) COLLATE utf8_sinhala_ci DEFAULT NULL,
`DELETE_TIME` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_sinhala_ci;
-- ----------------------------
-- Records of tinycms_quartz_job
-- ----------------------------
INSERT INTO `tinycms_quartz_job` VALUES ('1', 'ehrSyncData', '', 'default', '', '同步说明***', '0/5 * * * * ?', 'com.example.springbootbymybatis.quartz.job.OaSyncMeetingNowListJob', '0', '2022-07-06 10:33:42', '', '2022-07-06 10:33:42', 'root', '2022-07-06 10:33:42');
SET FOREIGN_KEY_CHECKS=1;
这里有个字段信息‘com.example.springbootbymybatis.quartz.job.OaSyncMeetingNowListJob’表示你的任务执行路径,如创建的任务类如下
package com.example.springbootbymybatis.quartz.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Author Chenxinlele
* @Date 2022/04/18 09:08
* @Version 1.0
*/
public class OaSyncMeetingNowListJob implements Job {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
@Override
//执行
public void execute(JobExecutionContext context) {
//在此处写上你的业务逻辑
System.out.println("五秒执行------->"+simpleDateFormat.format(new Date()));
};
}
0/5 * * * * ?为执行的时间(每5秒),可自行编写业务需求。
接下来为主要的服务类讲解
package com.example.springbootbymybatis.Service;
import com.example.springbootbymybatis.entity.tinycmsQuartzJob;
import com.example.springbootbymybatis.mapper.QuartzMapper;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class QuartzService {
@Autowired
QuartzMapper quartzMapper;
@Autowired
private Scheduler scheduler;
public tinycmsQuartzJob Sel(int id) {
return quartzMapper.Sel(id);
}
//启动任务类
public Boolean startQuartzJob(tinycmsQuartzJob quartzJob) {
JobKey key = new JobKey(quartzJob.getJob_name(), quartzJob.getJob_group());
try {
//构建job信息
Class clazz = null;
try {
clazz = Class.forName(quartzJob.getJob_class_name());
clazz.newInstance();
} catch (Exception e) {
clazz = null;
}
if (!scheduler.checkExists(key)) {
JobDetail job = JobBuilder.newJob(clazz).withIdentity(quartzJob.getJob_name(),
quartzJob.getJob_group())
.withDescription(quartzJob.getDescription()).build();
// 触发时间点
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(quartzJob.getCron_expression().trim());
/*Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger-" + quartzJob.getJob_name(), quartzJob.getJob_group())
.startNow().withSchedule(cronScheduleBuilder).build();*/
Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity("trigger-" + quartzJob.getJob_name(), quartzJob.getJob_group())
.withSchedule(cronScheduleBuilder).build();
//交由Scheduler安排触发
try {
scheduler.scheduleJob(job, trigger1);
} catch (SchedulerException se) {
}
}
scheduler.triggerJob(key);
return true;
} catch (SchedulerException e) {
e.printStackTrace();
}
return false;
}
//删除任务,也就相当于停止了任务,如要删除数据库中信息可在逻辑中编写相关删除数据库信息
public void deleteQuartzJob(tinycmsQuartzJob quartzJob) {
try {
TriggerKey triggerKey = TriggerKey.triggerKey(quartzJob.getJob_name(), quartzJob.getJob_group());
// 停止触发器
scheduler.pauseTrigger(triggerKey);
// 移除触发器
scheduler.unscheduleJob(triggerKey);
// 删除任务
scheduler.deleteJob(JobKey.jobKey(quartzJob.getJob_name(), quartzJob.getJob_group()));
System.out.println("removeJob:" + JobKey.jobKey((quartzJob.getJob_name())));
} catch (Exception e) {
e.getMessage();
}
}
}