SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码
2024-08-28 18:12:40
- 页面展现
- 后台任务处理:恢复任务 15s执行一次
后台打印消息 - 不BB了,直接上代码
import... /**
* 调度工厂类
* Created by jinyu on 2018/4/14/014.
*/
@Service
@Component
public class MySchedulerFactory {
private static Logger logger = LoggerFactory.getLogger(MySchedulerFactory.class);
@Autowired
SchedulerFactoryBean schedulerFactoryBean; // 任务配置读取服务
@Autowired
private AsyncQuartzConfService asyncQuartzConfService; public void scheduleJobs() throws SchedulerException {
Scheduler scheduler = getScheduler();
startJob(scheduler);
} // 获取scheduler
private Scheduler getScheduler(){
return schedulerFactoryBean.getScheduler();
}
// 项目启动 开启任务
private void startJob(Scheduler scheduler) {
try {
List<Quartz_Config> jobList = asyncQuartzConfService.getJobList();
for (Quartz_Config config : jobList) {
// 1-暂停的任务 0-正常运行任务
if (1l==config.getStatus()){
continue;
}
@SuppressWarnings("unchecked")
Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(config.getQuartz_Class());
JobDetail jobDetail = JobBuilder.newJob(clazz)
.withIdentity(config.getName(), config.getGroup()).build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(config.getCron());
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(config.getName(), config.getGroup())
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}catch (SchedulerException e) {
e.printStackTrace();
}
} // 任务暂停
public void pauseJob(long id) throws SchedulerException {
Scheduler scheduler = getScheduler();
Quartz_Config quartz_config = asyncQuartzConfService.findById(id);
JobKey jobKey = JobKey.jobKey(quartz_config.getName(), quartz_config.getGroup());
scheduler.deleteJob(jobKey);
} // 任务恢复
public void resumeJob(long id) throws SchedulerException, ClassNotFoundException {
Scheduler scheduler = getScheduler();
Quartz_Config quartz_config = asyncQuartzConfService.findById(id);
JobKey jobKey = JobKey.jobKey(quartz_config.getName(), quartz_config.getGroup());
Class<? extends Job> clazz = (Class<? extends Job>) Class.forName(quartz_config.getQuartz_Class());
JobDetail jobDetail1 = scheduler.getJobDetail(jobKey);
if (jobDetail1==null){
JobDetail jobDetail = JobBuilder.newJob(clazz)
.withIdentity(quartz_config.getName(), quartz_config.getGroup()).build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(quartz_config.getCron());
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(quartz_config.getName(), quartz_config.getGroup())
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
}else {
scheduler.resumeJob(jobKey);
}
}
} - 启动Springboot监听
import ... /**
* 定时任务运行工厂类
* Created by jinyu on 2018/4/12/012.
*/
@Configuration
public class StartSchedulerListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
public MySchedulerFactory mySchedulerFactory; // springboot 启动监听
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
mySchedulerFactory.scheduleJobs();
} catch (SchedulerException e) {
e.printStackTrace();
}
} //注入SchedulerFactoryBean
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
return schedulerFactoryBean;
}
} - 任务类,按需创建
/**
* 定时任务实现类
* Created by jinyu on 2018/4/12/012.
*/
@Configuration
@Component
@EnableScheduling
public class ScheduleTask1 implements Job { private static Logger logger = LoggerFactory.getLogger(ScheduleTask1.class); @Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
try {
System.out.print("任务执行1 :");
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); } catch (Exception e) {
logger.error(e.getMessage());
}
} - 数据库
补充:源码地址
最新文章
- Get&;Post简单说明
- 一个C++类的注释:
- js:数据结构笔记4--队列
- 将String类型的XML解析并设置到实体类中
- Unity3d NGUI 地图
- DevExpress GridControl 复合表头/表头分层设计.
- accelerated C++ 中查找url(学习笔记)
- OPTICS光学算法
- .htaccess文件的妙用
- HttpGet协议与正则表达
- ionic2 跳转子页面隐藏底部导航栏
- [物理学与PDEs]第2章习题13 将 $p$ - 方程组化为守恒律形式的一阶拟线性对称双曲组
- project6 PIT游戏
- 处理数据库 Ora-00845: memory_traget not supported on this system 的错误
- mysql 函数应用
- iOS 证书申请和使用详解(详细版)阅读
- DSP 程序的执行时间
- ASP.NET Identity系列01,揭开神秘面纱
- [Python] Python 之 function, unbound method 和 bound method
- PMP备考指南之相关事项介绍