SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码
- 页面展现
- 后台任务处理:恢复任务 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());
}
} - 数据库
补充:源码地址
SpringBoot多任务Quartz动态管理Scheduler,时间配置,页面+源码的更多相关文章
- 基于spring-boot和docker-java实现对docker容器的动态管理和监控[附完整源码下载]
(我是个封面) docker简介 Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者喜爱.随着基于docker的开发者越来越多,doc ...
- SpringBoot 初始化流程以及各种常见第三方配置的源码实现
带着这几个问题去分析SpringBoot 初始化以及扩展机制实现 1.容器何时被创建,并默认配置了什么? 2.Spring 容器依赖于哪个后置处理器进行bean 容器的装配? 3.Spring 如何进 ...
- 【陪你系列】5 千字长文+ 30 张图解 | 陪你手撕 STL 空间配置器源码
大家好,我是小贺. 点赞再看,养成习惯 文章每周持续更新,可以微信搜索「herongwei」第一时间阅读和催更,本文 GitHub https://github.com/rongweihe/MoreT ...
- ArcGIS紧凑型切片读取与应用2-webgis动态加载紧凑型切片(附源码)
1.前言 上篇主要讲了一下紧凑型切片的的解析逻辑,这一篇主要讲一下使用openlayers动态加载紧凑型切片的web地图服务. 2.代码实现 上篇已经可以通过切片的x.y.z得对应的切片图片,现在使用 ...
- springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码
java项目源码详情描述:S020<springboot+mybatis+bootstrap开发员工oa后台管理系统项目源码>jboa项目有请假以及报销单的申请和审核session共享加登 ...
- MyEclipse如何配置Struts2源码的框架压缩包
1.MyEclipse如何配置Struts2源码的框架压缩包 如本机的Struts2框架压缩包路径为:D:\MyEclipseUserLibraries\struts\struts-2.3.15.3- ...
- 转换GMT秒数为日期时间格式-Delphi源码
转换GMT秒数为日期时间格式-Delphi源码.收藏最近在写PE分析工具的时候,需要转换TimeDateStamp字段值为日期时间格式,这是Delphi的源码. //把GMT时间的秒数转换成日期时间格 ...
- springBoot集成 quartz动态定时任务
项目中需要用到定时任务,考虑了下java方面定时任务无非就三种: 用Java自带的timer类.稍微看了一下,可以实现大部分的指定频率的任务的调度(timer.schedule()),也可以实现关闭和 ...
- Quartz动态改变任务时间
基于quartz-2.2 的动态任务调度 Quartz是一个完全由java编写的开源作业调度框架. 调度器 Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做 ...
随机推荐
- 在react项目添加看板娘(react-live2d)
有留意到看板娘这么个东西,简直就是我们程序员+动漫迷的挚爱.但是回观网上,大多只是在老旧的html的静态引入.vue甚至也有几个不怎么维护的,还是老旧的不行的SDK2.X的版本.这这这这!我们的rea ...
- Dos简易基础及常用Dos命令
Dos简易基础及常用Dos命令 什么是cmd? cmd是command的缩写,意指操作系统中的命令行程序,一般说的都是Windows中的Dos系统. 如何打开cmd? 键盘操作:Win + R 输入c ...
- leetcode刷题-40组合总和2
题目 给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates 中的每个数字在每个组合中只能使用 ...
- JavaScript五中迭代方法小解
ECMAScript 为数组定义了五个迭代方法.每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象——影响this的值.传入这些方法中的函数会接收三个参数:数组项的值.该 ...
- 手把手带你体验鸿蒙 harmonyOS
wNlRGd.png 前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 image.png 一.为什么要尝鲜 harmonyos? wNlfx ...
- 嵌入式Linux软链接使用技巧
软链接概述 软链接是Linux下常用的一种共享文件方式.目录的方式,这种方式类似于Windows下的快捷方式.一般一个文件或者目录在不同的路径都需要的时候,可以通过创建软链接的方式来共享,这样只系统下 ...
- Jack Straws(POJ 1127)
原题如下: Jack Straws Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5555 Accepted: 2536 ...
- Fliptile(POJ 3279)
原题如下: Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16494 Accepted: 6025 D ...
- 实践案例丨基于 Raft 协议的分布式数据库系统应用
摘要:简单介绍Raft协议的原理.以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验. 1.引言 在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离. 底层存储基 ...
- Python全栈工程师系列学习之学习记录
@ 目录 前言 Day 01 一.python的历史和种类 二.安装python解释器以及配置环境变量 三.变量.常量和注释 Day 02 Day 03 Day 04 Day 05 Day 06 一. ...