Files
dzpt/src/main/java/com/saye/hospitalgd/scheduler/MySchedulerFactory.java
2025-07-23 09:55:50 +08:00

165 lines
5.5 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.saye.hospitalgd.scheduler;
import java.util.HashMap;
import java.util.List;
import com.saye.hospitalgd.commons.string.StringDUtil;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.TriggerBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import com.saye.hospitalgd.model.BaseQuartzConfigEntity;
import com.saye.hospitalgd.service.quartz.BaseQuartzConfigService;
/**
* 调度工厂类
*/
@Service("MySchedulerFactory")
@Component
public class MySchedulerFactory {
private static Logger logger = LoggerFactory.getLogger(MySchedulerFactory.class);
@Autowired
SchedulerFactoryBean schedulerFactoryBean;
/**
* 任务配置读取服务
*/
@Autowired
private BaseQuartzConfigService baseQuartzConfigService;
public void scheduleJobs() throws SchedulerException {
Scheduler scheduler = getScheduler();
// 为了避免org.quartz.ObjectAlreadyExistsException在执行前将scheduler进行清理
scheduler.clear();
startJob(scheduler);
}
/**
* 获取scheduler
* @return
* @author
* @date 2018年12月27日
*/
public Scheduler getScheduler() {
return schedulerFactoryBean.getScheduler();
}
/**
* 项目启动 开启任务
* @param scheduler
* @author
* @date 2018年12月27日
*/
private void startJob(Scheduler scheduler) {
try {
List<BaseQuartzConfigEntity> jobList = baseQuartzConfigService.findAll(new HashMap<Object, Object>());
for (BaseQuartzConfigEntity config : jobList) {
try {
// 0-暂停的任务 1-正常运行任务
if ("0".equals(config.getStatus())) {
continue;
}
String classz = config.getQuartzClass();
if (StringDUtil.isNotBlank(classz)) {
@SuppressWarnings("unchecked")
Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(classz);
JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(config.getConfigId(), config.getQuartzGroup())
.usingJobData("id", config.getConfigId()).usingJobData("name", config.getQuartzName()).build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(config.getExpression());
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(config.getConfigId(), config.getQuartzGroup())
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
}
} catch (Exception e) {
logger.info("定时启动异常:" + config.getQuartzName() + " 异常信息:" + e.getMessage());
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 任务暂停(就是删了)
* @param id
* @throws Exception
* @author
* @date 2018年12月27日
*/
public void pauseJob(String id) throws Exception {
Scheduler scheduler = getScheduler();
BaseQuartzConfigEntity QuartzConfig = baseQuartzConfigService.get(String.valueOf(id));
JobKey jobKey = JobKey.jobKey(QuartzConfig.getConfigId(), QuartzConfig.getQuartzGroup());
scheduler.deleteJob(jobKey);
}
/**
* 任务恢复
* @param id
* @throws Exception
* @author
* @date 2018年12月27日
*/
public void resumeJob(String id) throws Exception {
Scheduler scheduler = getScheduler();
BaseQuartzConfigEntity QuartzConfig = baseQuartzConfigService.get(String.valueOf(id));
JobKey jobKey = JobKey.jobKey(QuartzConfig.getConfigId(), QuartzConfig.getQuartzGroup());
Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(QuartzConfig.getQuartzClass());
JobDetail jobDetail1 = scheduler.getJobDetail(jobKey);
if (jobDetail1 == null) {
JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(QuartzConfig.getConfigId(), QuartzConfig.getQuartzGroup())
.usingJobData("id", QuartzConfig.getConfigId()).usingJobData("name", QuartzConfig.getQuartzName()).build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(QuartzConfig.getExpression());
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(QuartzConfig.getConfigId(), QuartzConfig.getQuartzGroup())
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
} else {
scheduler.resumeJob(jobKey);
}
}
/**
* 添加新的定时任务
* @param id
* @param name
* @param group
* @param cron
* @param classz
* @throws Exception
*/
public void addJob(String id,String name, String group,String cron, String classz) throws Exception{
Scheduler scheduler = schedulerFactoryBean.getScheduler();
try {
if (StringDUtil.isNotBlank(classz)) {
@SuppressWarnings("unchecked")
Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(classz);
JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(id, group)
.usingJobData("id", id).usingJobData("name", name).build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(id, group)
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
}
} catch (Exception e) {
logger.info("添加定时任务失败:" + " 异常信息:" + e.getMessage());
}
}
}