package com.doumee.core.job;
|
|
import com.doumee.config.quartz.JobHandler;
|
import com.doumee.config.quartz.JobHandlerWithDisallowConcurrent;
|
import com.doumee.core.constants.Constants;
|
import com.doumee.core.utils.Utils;
|
import lombok.AllArgsConstructor;
|
import lombok.Data;
|
import lombok.extern.slf4j.Slf4j;
|
import org.quartz.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* 任务调度器代理
|
* @author dm
|
* @since 2025/03/31 16:44
|
*/
|
@Slf4j
|
@Component
|
public class SchedulerProxy {
|
|
@Autowired
|
private Scheduler scheduler;
|
|
/**
|
* 创建JOB
|
*
|
* @param job 详见SchedulerProxy$Job
|
*/
|
public void createJob (Job job) {
|
try {
|
// 创建Job
|
Class handleClass = JobHandler.class;
|
if (job.getDisallowConcurrent()) {
|
handleClass = JobHandlerWithDisallowConcurrent.class;
|
}
|
JobDetail newJob = JobBuilder.newJob(handleClass).withIdentity(job.getHandler()).build();
|
// - 添加JOB运行时数据
|
newJob.getJobDataMap().put(Constants.Job.JOB_DATA_MAP_JOB_ID, job.getId());
|
// 创建Trigger
|
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression())
|
.withMisfireHandlingInstructionDoNothing();
|
CronTrigger trigger = TriggerBuilder.newTrigger()
|
.withIdentity(job.getHandler() + "Trigger")
|
.withSchedule(scheduleBuilder).build();
|
// 加入调度
|
scheduler.scheduleJob(newJob, trigger);
|
} catch (SchedulerException e) {
|
log.error("EVA: create job throw an exception", e);
|
}
|
}
|
|
/**
|
* JOB代理对象,不依赖其他逻辑层
|
*/
|
@Data
|
@AllArgsConstructor
|
public static class Job {
|
|
private Integer id;
|
|
private String handler;
|
|
private String cronExpression;
|
|
private Boolean disallowConcurrent;
|
}
|
}
|