SpringBoot整合自定义quartz实现任务调度

本文主要是介绍SpringBoot整合自定义quartz实现任务调度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在不引入quartz相关表的情况下,自定义任务调度存储表,实现SpringBoot项目启动后自动执行自定义任务调度类。

1、建立自定义任务调度存储表

DROP TABLE IF EXISTS `bmd_flow_schedule`;
CREATE TABLE `bmd_flow_schedule` (`taskID` char(20) NOT NULL,`taskName` varchar(32) DEFAULT NULL,`taskTypeID` char(20) DEFAULT NULL,`taskTypeName` varchar(32) DEFAULT NULL,`taskClass` varchar(128) DEFAULT NULL,`exp` varchar(64) DEFAULT NULL,`taskStatus` char(1) DEFAULT NULL,PRIMARY KEY (`taskID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、添加quartz的依赖到pom.xml中

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.3.0</version></dependency>

3、创建任务调度执行类HelloworldJob.java,实现Job接口

package com.example.demo.quartz;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;import java.util.Date;public class HelloworldJob implements Job {@Overridepublic void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {System.out.println("HelloworldJob start......");System.out.println(new Date()+"----Hello world!:" + jobExecutionContext.getJobDetail().getKey());System.out.println("HelloworldJob end......");}
}

4、在第1步中创建的bmd_flow_schedule表中配置任务调度执行类HelloworldJob.java

INSERT INTO `bmd_flow_schedule` (`taskID`, `taskName`, `taskTypeID`, `taskTypeName`, `taskClass`, `exp`, `taskStatus`) VALUES ('1', 'HelloworldJob', 'VM', '', 'com.example.demo.quartz.HelloworldJob', '0/1 * * * * ? 2019', '1');

5、创建SpringBoot启动后的InitJob方法类,并在InitJob方法中将任务执行类HelloworldJob.java自动加载到quartz中,启动任务。

package com.example.demo.init;import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;/*
启动即执行特定方法*/
@Component
public class InitJob  implements ApplicationRunner{@Resourceprivate JdbcTemplate jdbcTemplate;@Override@SuppressWarnings("unchecked")public void run(ApplicationArguments args) throws Exception {System.out.println(new Date());SchedulerFactory schedulerFactory = new StdSchedulerFactory();Scheduler scheduler = schedulerFactory.getScheduler();// 启动schedulerscheduler.start();List list = jdbcTemplate.queryForList("select taskName,taskClass,exp from  bmd_flow_schedule where taskStatus='1'");Iterator it = list.iterator(); //这里需要注意的是要用list的iterator遍历if(list.size()>0){while(it.hasNext()){Map<?, ?> rece = (Map<?, ?>) it.next(); //这里要注意,it.next()得到这一条数据System.out.println(rece.get("exp"));//1、HelloWorldJobString taskClass = rece.get("taskClass").toString();String exp = rece.get("exp").toString();String taskName = rece.get("taskName").toString();Class classObj = Class.forName(taskClass);// 创建HelloworldJob的JobDetail实例,并设置name/groupJobDetail jobDetail = JobBuilder.newJob(classObj).withIdentity("jobDetailTaskName",taskName)//JobDataMap可以给任务传递参数.usingJobData("jobDetailTaskName",taskName).build();// 创建Trigger触发器设置使用cronSchedule方式调度Trigger trigger = TriggerBuilder.newTrigger().withIdentity("triggerTaskName",taskName).usingJobData("triggerTaskName",taskName).startNow()//.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).withSchedule(CronScheduleBuilder.cronSchedule(exp)).build();// 注册JobDetail实例到scheduler以及使用对应的Trigger触发时机scheduler.scheduleJob(jobDetail,trigger);}}}
}

6、启动SpringBoot项目,执行任务调度

这篇关于SpringBoot整合自定义quartz实现任务调度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130113

相关文章

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

c++ 类成员变量默认初始值的实现

《c++类成员变量默认初始值的实现》本文主要介绍了c++类成员变量默认初始值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录C++类成员变量初始化c++类的变量的初始化在C++中,如果使用类成员变量时未给定其初始值,那么它将被

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问