赞
踩
1.pom文件
- <parent>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-parent</artifactId>
- <version>2.2.4.RELEASE</version>
- <relativePath /> <!-- lookup parent from repository -->
- </parent>
-
- <dependencies>
-
- <!-- SpringBoot 核心包 -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <!--Spring框架基本的核心工具 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- </dependency>
-
- <!-- 定时任务 -->
- <dependency>
- <groupId>org.quartz-scheduler</groupId>
- <artifactId>quartz</artifactId>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-jdbc</artifactId>
- </dependency>
-
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- </dependency>
-
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>

2.导入表结构
- /*
- Navicat MySQL Data Transfer
- Source Server : localhost
- Source Server Version : 50562
- Source Host : localhost:3306
- Source Database : ry-vue
- Target Server Type : MYSQL
- Target Server Version : 50562
- File Encoding : 65001
- Date: 2020-12-18 10:03:52
- */
-
- SET FOREIGN_KEY_CHECKS=0;
-
- -- ----------------------------
- -- Table structure for QRTZ_BLOB_TRIGGERS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`;
- CREATE TABLE `QRTZ_BLOB_TRIGGERS` (
- `sched_name` varchar(64) NOT NULL,
- `trigger_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- `blob_data` blob,
- PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
- CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_CALENDARS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_CALENDARS`;
- CREATE TABLE `QRTZ_CALENDARS` (
- `sched_name` varchar(64) NOT NULL,
- `calendar_name` varchar(64) NOT NULL,
- `calendar` blob NOT NULL,
- PRIMARY KEY (`sched_name`,`calendar_name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_CRON_TRIGGERS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`;
- CREATE TABLE `QRTZ_CRON_TRIGGERS` (
- `sched_name` varchar(64) NOT NULL,
- `trigger_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- `cron_expression` varchar(200) NOT NULL,
- `time_zone_id` varchar(80) DEFAULT NULL,
- PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
- CONSTRAINT `QRTZ_CRON_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_FIRED_TRIGGERS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`;
- CREATE TABLE `QRTZ_FIRED_TRIGGERS` (
- `sched_name` varchar(64) NOT NULL,
- `entry_id` varchar(64) NOT NULL,
- `trigger_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- `instance_name` varchar(200) NOT NULL,
- `fired_time` bigint(13) NOT NULL,
- `sched_time` bigint(13) NOT NULL,
- `priority` int(11) NOT NULL,
- `state` varchar(16) NOT NULL,
- `job_name` varchar(200) DEFAULT NULL,
- `job_group` varchar(200) DEFAULT NULL,
- `is_nonconcurrent` varchar(1) DEFAULT NULL,
- `requests_recovery` varchar(1) DEFAULT NULL,
- PRIMARY KEY (`sched_name`,`entry_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_JOB_DETAILS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`;
- CREATE TABLE `QRTZ_JOB_DETAILS` (
- `sched_name` varchar(64) NOT NULL,
- `job_name` varchar(64) NOT NULL,
- `job_group` varchar(64) NOT NULL,
- `description` varchar(250) DEFAULT NULL,
- `job_class_name` varchar(250) NOT NULL,
- `is_durable` varchar(1) NOT NULL,
- `is_nonconcurrent` varchar(1) NOT NULL,
- `is_update_data` varchar(1) NOT NULL,
- `requests_recovery` varchar(1) NOT NULL,
- `job_data` blob,
- PRIMARY KEY (`sched_name`,`job_name`,`job_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_LOCKS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_LOCKS`;
- CREATE TABLE `QRTZ_LOCKS` (
- `sched_name` varchar(64) NOT NULL,
- `lock_name` varchar(40) NOT NULL,
- PRIMARY KEY (`sched_name`,`lock_name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_PAUSED_TRIGGER_GRPS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`;
- CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` (
- `sched_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- PRIMARY KEY (`sched_name`,`trigger_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_SCHEDULER_STATE
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`;
- CREATE TABLE `QRTZ_SCHEDULER_STATE` (
- `sched_name` varchar(64) NOT NULL,
- `instance_name` varchar(64) NOT NULL,
- `last_checkin_time` bigint(13) NOT NULL,
- `checkin_interval` bigint(13) NOT NULL,
- PRIMARY KEY (`sched_name`,`instance_name`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_SIMPLE_TRIGGERS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`;
- CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` (
- `sched_name` varchar(64) NOT NULL,
- `trigger_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- `repeat_count` bigint(7) NOT NULL,
- `repeat_interval` bigint(12) NOT NULL,
- `times_triggered` bigint(10) NOT NULL,
- PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
- CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_SIMPROP_TRIGGERS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`;
- CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` (
- `sched_name` varchar(64) NOT NULL,
- `trigger_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- `str_prop_1` varchar(512) DEFAULT NULL,
- `str_prop_2` varchar(512) DEFAULT NULL,
- `str_prop_3` varchar(512) DEFAULT NULL,
- `int_prop_1` int(11) DEFAULT NULL,
- `int_prop_2` int(11) DEFAULT NULL,
- `long_prop_1` bigint(20) DEFAULT NULL,
- `long_prop_2` bigint(20) DEFAULT NULL,
- `dec_prop_1` decimal(13,4) DEFAULT NULL,
- `dec_prop_2` decimal(13,4) DEFAULT NULL,
- `bool_prop_1` varchar(1) DEFAULT NULL,
- `bool_prop_2` varchar(1) DEFAULT NULL,
- PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
- CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
- -- ----------------------------
- -- Table structure for QRTZ_TRIGGERS
- -- ----------------------------
- DROP TABLE IF EXISTS `QRTZ_TRIGGERS`;
- CREATE TABLE `QRTZ_TRIGGERS` (
- `sched_name` varchar(64) NOT NULL,
- `trigger_name` varchar(64) NOT NULL,
- `trigger_group` varchar(64) NOT NULL,
- `job_name` varchar(64) NOT NULL,
- `job_group` varchar(64) NOT NULL,
- `description` varchar(250) DEFAULT NULL,
- `next_fire_time` bigint(13) DEFAULT NULL,
- `prev_fire_time` bigint(13) DEFAULT NULL,
- `priority` int(11) DEFAULT NULL,
- `trigger_state` varchar(16) NOT NULL,
- `trigger_type` varchar(8) NOT NULL,
- `start_time` bigint(13) NOT NULL,
- `end_time` bigint(13) DEFAULT NULL,
- `calendar_name` varchar(200) DEFAULT NULL,
- `misfire_instr` smallint(2) DEFAULT NULL,
- `job_data` blob,
- PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
- KEY `sched_name` (`sched_name`,`job_name`,`job_group`),
- CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `QRTZ_JOB_DETAILS` (`sched_name`, `job_name`, `job_group`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.配置文件
- spring:
- datasource:
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://localhost:3306/quartz?useSSL=FALSE&serverTimezone=Asia/Shanghai
- username: root
- password: 123456
4.配置类
- package com.knife.quartzTest;
-
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.scheduling.quartz.SchedulerFactoryBean;
- import javax.sql.DataSource;
- import java.util.Properties;
-
- /**
- * 定时任务配置
- *
- * @author ruoyi
- */
- @Configuration
- public class ScheduleConfig
- {
- @Bean
- public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource)
- {
- SchedulerFactoryBean factory = new SchedulerFactoryBean();
- factory.setDataSource(dataSource);
-
- // quartz参数
- Properties prop = new Properties();
- prop.put("org.quartz.scheduler.instanceName", "KNIFEScheduler");
- prop.put("org.quartz.scheduler.instanceId", "AUTO");
- // 线程池配置
- prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
- prop.put("org.quartz.threadPool.threadCount", "20");
- prop.put("org.quartz.threadPool.threadPriority", "5");
- // JobStore配置
- prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
- // 集群配置
- prop.put("org.quartz.jobStore.isClustered", "true");
- prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
- prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
- prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
-
- // sqlserver 启用
- // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
- prop.put("org.quartz.jobStore.misfireThreshold", "12000");
- prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
- factory.setQuartzProperties(prop);
-
- factory.setSchedulerName("KNIFEScheduler");
- // 延时启动
- factory.setStartupDelay(1);
- factory.setApplicationContextSchedulerContextKey("applicationContextKey");
- // 可选,QuartzScheduler
- // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
- factory.setOverwriteExistingJobs(true);
- // 设置自动启动,默认为true
- factory.setAutoStartup(true);
-
- return factory;
- }
- }

5.实现job接口
- package com.knife.quartzTest;
-
- import java.util.Date;
-
- import org.quartz.Job;
- import org.quartz.JobExecutionContext;
- import org.quartz.JobExecutionException;
-
- public class QuartzJob implements Job
- {
-
- @Override
- public void execute(JobExecutionContext context) throws JobExecutionException
- {
- Date date = new Date();
- System.out.println("TIME:"+date.toString());
- System.out.println("TASKNAME:"+context.getMergedJobDataMap().get("TASKNAME"));
- System.out.println("TASKCONTENT:"+context.getMergedJobDataMap().get("TASKCONTENT"));
-
- }
- }

6.开启任务接口
- package com.knife.quartzTest;
-
- import java.util.Date;
- import java.util.UUID;
-
- 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.quartz.TriggerKey;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RestController;
-
- @RestController
- public class ScheduleController {
-
- @Autowired
- private Scheduler scheduler;
-
- @GetMapping("/add")
- public String add(String cron) throws SchedulerException {
-
- Class<? extends Job> jobClass = QuartzJob.class;
- // 构建job信息
- String jobId = UUID.randomUUID().toString();
- String jobGroup = "DEFAULT";
- JobKey jobkey = JobKey.jobKey(jobId, jobGroup);
- JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobkey).build();
-
- // 表达式调度构建器
- CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron).withMisfireHandlingInstructionFireAndProceed();
-
- // 按新的cronExpression表达式构建一个新的trigger
- CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(TriggerKey.triggerKey(jobId, jobGroup))
- .withSchedule(cronScheduleBuilder).build();
-
- // 放入参数,运行时的方法可以获取
- jobDetail.getJobDataMap().put("TASKNAME", "测试任务");
- jobDetail.getJobDataMap().put("TASKCONTENT", "测试任务内容");
-
- Date date = scheduler.scheduleJob(jobDetail, trigger);
-
- return "执行时间:"+date.toString();
- }
-
- }

7.测试
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。