最近需要做一个简单的监控系统,需要定时任务查询不同数据库表的数据是否正常,需要动态的增加定时任务与监控SQL,这里简单记一下
1、 pom.xml 依赖配置
这里用的springboot 是1.5.10,如果是2.x版本已经集成了quartz
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
<relativePath/>
</parent>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2、实体类 SchedulerJobEntity
@Data
public class SchedulerJobEntity extends BaseEntity {
private static final long serialVersionUID = 6678656140297128519L;
private String jobName;
private String beanName;
private String methodName;
private String params;
private String cronExpression;
private String status;
private String remark;
}
3、ScheduleJob 和 JobContext
任务执行时,根据SchedulerJobEntity中的类名和方法名称获取需要执行的定时任务,JobContext用于参数传递
@Data
public class JobContext implements Serializable {
private static final long serialVersionUID = -8127498514244724662L;
/**
* 任务ID
*/
private Integer jobId;
/**
* 任务名称
*/
private String jobName;
/**
* jobEntity的参数
*/
private String params;
/**
* 执行cron表达式
*/
private String cronExpression;
/**
* 如果{@link SchedulerJobEntity#getParams()}是json格式,那么会把里面的值存入此map,这里也可以加入其它参数
*/
private Map<String, Object> paramMap = new HashMap<>();
/**
* 执行结果
*/
private Map<String, Object> resultMap = new HashMap<>();
}
@Slf4j
public class ScheduleJob extends QuartzJobBean {
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
SchedulerJobEntity jobEntity = (SchedulerJobEntity) context.getMergedJobDataMap().get(JOB_PARAM_KEY);
SchedulerJobLogService scheduleJobLogService = SpringUtil.getBean(SchedulerJobLogService.class);
SchedulerJobLogEntity logEntity = new SchedulerJobLogEntity();
logEntity.setJobId(jobEntity.getId());
logEntity.setJobName(jobEntity.getJobName());
logEntity.setParams(jobEntit