当前位置:   article > 正文

springboot 整合 quartz-scheduler_springboot quartz-scheduler

springboot quartz-scheduler

1.pom文件

  1. <parent>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-parent</artifactId>
  4. <version>2.2.4.RELEASE</version>
  5. <relativePath /> <!-- lookup parent from repository -->
  6. </parent>
  7. <dependencies>
  8. <!-- SpringBoot 核心包 -->
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-web</artifactId>
  12. </dependency>
  13. <!--Spring框架基本的核心工具 -->
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-context-support</artifactId>
  17. </dependency>
  18. <!-- 定时任务 -->
  19. <dependency>
  20. <groupId>org.quartz-scheduler</groupId>
  21. <artifactId>quartz</artifactId>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-jdbc</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>mysql</groupId>
  29. <artifactId>mysql-connector-java</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>junit</groupId>
  33. <artifactId>junit</artifactId>
  34. <scope>test</scope>
  35. </dependency>
  36. </dependencies>

2.导入表结构

  1. /*
  2. Navicat MySQL Data Transfer
  3. Source Server : localhost
  4. Source Server Version : 50562
  5. Source Host : localhost:3306
  6. Source Database : ry-vue
  7. Target Server Type : MYSQL
  8. Target Server Version : 50562
  9. File Encoding : 65001
  10. Date: 2020-12-18 10:03:52
  11. */
  12. SET FOREIGN_KEY_CHECKS=0;
  13. -- ----------------------------
  14. -- Table structure for QRTZ_BLOB_TRIGGERS
  15. -- ----------------------------
  16. DROP TABLE IF EXISTS `QRTZ_BLOB_TRIGGERS`;
  17. CREATE TABLE `QRTZ_BLOB_TRIGGERS` (
  18. `sched_name` varchar(64) NOT NULL,
  19. `trigger_name` varchar(64) NOT NULL,
  20. `trigger_group` varchar(64) NOT NULL,
  21. `blob_data` blob,
  22. PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
  23. CONSTRAINT `QRTZ_BLOB_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
  24. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  25. -- ----------------------------
  26. -- Table structure for QRTZ_CALENDARS
  27. -- ----------------------------
  28. DROP TABLE IF EXISTS `QRTZ_CALENDARS`;
  29. CREATE TABLE `QRTZ_CALENDARS` (
  30. `sched_name` varchar(64) NOT NULL,
  31. `calendar_name` varchar(64) NOT NULL,
  32. `calendar` blob NOT NULL,
  33. PRIMARY KEY (`sched_name`,`calendar_name`)
  34. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  35. -- ----------------------------
  36. -- Table structure for QRTZ_CRON_TRIGGERS
  37. -- ----------------------------
  38. DROP TABLE IF EXISTS `QRTZ_CRON_TRIGGERS`;
  39. CREATE TABLE `QRTZ_CRON_TRIGGERS` (
  40. `sched_name` varchar(64) NOT NULL,
  41. `trigger_name` varchar(64) NOT NULL,
  42. `trigger_group` varchar(64) NOT NULL,
  43. `cron_expression` varchar(200) NOT NULL,
  44. `time_zone_id` varchar(80) DEFAULT NULL,
  45. PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
  46. CONSTRAINT `QRTZ_CRON_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
  47. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  48. -- ----------------------------
  49. -- Table structure for QRTZ_FIRED_TRIGGERS
  50. -- ----------------------------
  51. DROP TABLE IF EXISTS `QRTZ_FIRED_TRIGGERS`;
  52. CREATE TABLE `QRTZ_FIRED_TRIGGERS` (
  53. `sched_name` varchar(64) NOT NULL,
  54. `entry_id` varchar(64) NOT NULL,
  55. `trigger_name` varchar(64) NOT NULL,
  56. `trigger_group` varchar(64) NOT NULL,
  57. `instance_name` varchar(200) NOT NULL,
  58. `fired_time` bigint(13) NOT NULL,
  59. `sched_time` bigint(13) NOT NULL,
  60. `priority` int(11) NOT NULL,
  61. `state` varchar(16) NOT NULL,
  62. `job_name` varchar(200) DEFAULT NULL,
  63. `job_group` varchar(200) DEFAULT NULL,
  64. `is_nonconcurrent` varchar(1) DEFAULT NULL,
  65. `requests_recovery` varchar(1) DEFAULT NULL,
  66. PRIMARY KEY (`sched_name`,`entry_id`)
  67. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  68. -- ----------------------------
  69. -- Table structure for QRTZ_JOB_DETAILS
  70. -- ----------------------------
  71. DROP TABLE IF EXISTS `QRTZ_JOB_DETAILS`;
  72. CREATE TABLE `QRTZ_JOB_DETAILS` (
  73. `sched_name` varchar(64) NOT NULL,
  74. `job_name` varchar(64) NOT NULL,
  75. `job_group` varchar(64) NOT NULL,
  76. `description` varchar(250) DEFAULT NULL,
  77. `job_class_name` varchar(250) NOT NULL,
  78. `is_durable` varchar(1) NOT NULL,
  79. `is_nonconcurrent` varchar(1) NOT NULL,
  80. `is_update_data` varchar(1) NOT NULL,
  81. `requests_recovery` varchar(1) NOT NULL,
  82. `job_data` blob,
  83. PRIMARY KEY (`sched_name`,`job_name`,`job_group`)
  84. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  85. -- ----------------------------
  86. -- Table structure for QRTZ_LOCKS
  87. -- ----------------------------
  88. DROP TABLE IF EXISTS `QRTZ_LOCKS`;
  89. CREATE TABLE `QRTZ_LOCKS` (
  90. `sched_name` varchar(64) NOT NULL,
  91. `lock_name` varchar(40) NOT NULL,
  92. PRIMARY KEY (`sched_name`,`lock_name`)
  93. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  94. -- ----------------------------
  95. -- Table structure for QRTZ_PAUSED_TRIGGER_GRPS
  96. -- ----------------------------
  97. DROP TABLE IF EXISTS `QRTZ_PAUSED_TRIGGER_GRPS`;
  98. CREATE TABLE `QRTZ_PAUSED_TRIGGER_GRPS` (
  99. `sched_name` varchar(64) NOT NULL,
  100. `trigger_group` varchar(64) NOT NULL,
  101. PRIMARY KEY (`sched_name`,`trigger_group`)
  102. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  103. -- ----------------------------
  104. -- Table structure for QRTZ_SCHEDULER_STATE
  105. -- ----------------------------
  106. DROP TABLE IF EXISTS `QRTZ_SCHEDULER_STATE`;
  107. CREATE TABLE `QRTZ_SCHEDULER_STATE` (
  108. `sched_name` varchar(64) NOT NULL,
  109. `instance_name` varchar(64) NOT NULL,
  110. `last_checkin_time` bigint(13) NOT NULL,
  111. `checkin_interval` bigint(13) NOT NULL,
  112. PRIMARY KEY (`sched_name`,`instance_name`)
  113. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  114. -- ----------------------------
  115. -- Table structure for QRTZ_SIMPLE_TRIGGERS
  116. -- ----------------------------
  117. DROP TABLE IF EXISTS `QRTZ_SIMPLE_TRIGGERS`;
  118. CREATE TABLE `QRTZ_SIMPLE_TRIGGERS` (
  119. `sched_name` varchar(64) NOT NULL,
  120. `trigger_name` varchar(64) NOT NULL,
  121. `trigger_group` varchar(64) NOT NULL,
  122. `repeat_count` bigint(7) NOT NULL,
  123. `repeat_interval` bigint(12) NOT NULL,
  124. `times_triggered` bigint(10) NOT NULL,
  125. PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
  126. CONSTRAINT `QRTZ_SIMPLE_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
  127. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  128. -- ----------------------------
  129. -- Table structure for QRTZ_SIMPROP_TRIGGERS
  130. -- ----------------------------
  131. DROP TABLE IF EXISTS `QRTZ_SIMPROP_TRIGGERS`;
  132. CREATE TABLE `QRTZ_SIMPROP_TRIGGERS` (
  133. `sched_name` varchar(64) NOT NULL,
  134. `trigger_name` varchar(64) NOT NULL,
  135. `trigger_group` varchar(64) NOT NULL,
  136. `str_prop_1` varchar(512) DEFAULT NULL,
  137. `str_prop_2` varchar(512) DEFAULT NULL,
  138. `str_prop_3` varchar(512) DEFAULT NULL,
  139. `int_prop_1` int(11) DEFAULT NULL,
  140. `int_prop_2` int(11) DEFAULT NULL,
  141. `long_prop_1` bigint(20) DEFAULT NULL,
  142. `long_prop_2` bigint(20) DEFAULT NULL,
  143. `dec_prop_1` decimal(13,4) DEFAULT NULL,
  144. `dec_prop_2` decimal(13,4) DEFAULT NULL,
  145. `bool_prop_1` varchar(1) DEFAULT NULL,
  146. `bool_prop_2` varchar(1) DEFAULT NULL,
  147. PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
  148. CONSTRAINT `QRTZ_SIMPROP_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `trigger_name`, `trigger_group`) REFERENCES `QRTZ_TRIGGERS` (`sched_name`, `trigger_name`, `trigger_group`)
  149. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  150. -- ----------------------------
  151. -- Table structure for QRTZ_TRIGGERS
  152. -- ----------------------------
  153. DROP TABLE IF EXISTS `QRTZ_TRIGGERS`;
  154. CREATE TABLE `QRTZ_TRIGGERS` (
  155. `sched_name` varchar(64) NOT NULL,
  156. `trigger_name` varchar(64) NOT NULL,
  157. `trigger_group` varchar(64) NOT NULL,
  158. `job_name` varchar(64) NOT NULL,
  159. `job_group` varchar(64) NOT NULL,
  160. `description` varchar(250) DEFAULT NULL,
  161. `next_fire_time` bigint(13) DEFAULT NULL,
  162. `prev_fire_time` bigint(13) DEFAULT NULL,
  163. `priority` int(11) DEFAULT NULL,
  164. `trigger_state` varchar(16) NOT NULL,
  165. `trigger_type` varchar(8) NOT NULL,
  166. `start_time` bigint(13) NOT NULL,
  167. `end_time` bigint(13) DEFAULT NULL,
  168. `calendar_name` varchar(200) DEFAULT NULL,
  169. `misfire_instr` smallint(2) DEFAULT NULL,
  170. `job_data` blob,
  171. PRIMARY KEY (`sched_name`,`trigger_name`,`trigger_group`),
  172. KEY `sched_name` (`sched_name`,`job_name`,`job_group`),
  173. CONSTRAINT `QRTZ_TRIGGERS_ibfk_1` FOREIGN KEY (`sched_name`, `job_name`, `job_group`) REFERENCES `QRTZ_JOB_DETAILS` (`sched_name`, `job_name`, `job_group`)
  174. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3.配置文件

  1. spring:
  2. datasource:
  3. driver-class-name: com.mysql.cj.jdbc.Driver
  4. url: jdbc:mysql://localhost:3306/quartz?useSSL=FALSE&serverTimezone=Asia/Shanghai
  5. username: root
  6. password: 123456

4.配置类

  1. package com.knife.quartzTest;
  2. import org.springframework.context.annotation.Bean;
  3. import org.springframework.context.annotation.Configuration;
  4. import org.springframework.scheduling.quartz.SchedulerFactoryBean;
  5. import javax.sql.DataSource;
  6. import java.util.Properties;
  7. /**
  8. * 定时任务配置
  9. *
  10. * @author ruoyi
  11. */
  12. @Configuration
  13. public class ScheduleConfig
  14. {
  15. @Bean
  16. public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource)
  17. {
  18. SchedulerFactoryBean factory = new SchedulerFactoryBean();
  19. factory.setDataSource(dataSource);
  20. // quartz参数
  21. Properties prop = new Properties();
  22. prop.put("org.quartz.scheduler.instanceName", "KNIFEScheduler");
  23. prop.put("org.quartz.scheduler.instanceId", "AUTO");
  24. // 线程池配置
  25. prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
  26. prop.put("org.quartz.threadPool.threadCount", "20");
  27. prop.put("org.quartz.threadPool.threadPriority", "5");
  28. // JobStore配置
  29. prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
  30. // 集群配置
  31. prop.put("org.quartz.jobStore.isClustered", "true");
  32. prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000");
  33. prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "1");
  34. prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true");
  35. // sqlserver 启用
  36. // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
  37. prop.put("org.quartz.jobStore.misfireThreshold", "12000");
  38. prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
  39. factory.setQuartzProperties(prop);
  40. factory.setSchedulerName("KNIFEScheduler");
  41. // 延时启动
  42. factory.setStartupDelay(1);
  43. factory.setApplicationContextSchedulerContextKey("applicationContextKey");
  44. // 可选,QuartzScheduler
  45. // 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了
  46. factory.setOverwriteExistingJobs(true);
  47. // 设置自动启动,默认为true
  48. factory.setAutoStartup(true);
  49. return factory;
  50. }
  51. }

 

 

5.实现job接口

  1. package com.knife.quartzTest;
  2. import java.util.Date;
  3. import org.quartz.Job;
  4. import org.quartz.JobExecutionContext;
  5. import org.quartz.JobExecutionException;
  6. public class QuartzJob implements Job
  7. {
  8. @Override
  9. public void execute(JobExecutionContext context) throws JobExecutionException
  10. {
  11. Date date = new Date();
  12. System.out.println("TIME:"+date.toString());
  13. System.out.println("TASKNAME:"+context.getMergedJobDataMap().get("TASKNAME"));
  14. System.out.println("TASKCONTENT:"+context.getMergedJobDataMap().get("TASKCONTENT"));
  15. }
  16. }

6.开启任务接口

  1. package com.knife.quartzTest;
  2. import java.util.Date;
  3. import java.util.UUID;
  4. import org.quartz.CronScheduleBuilder;
  5. import org.quartz.CronTrigger;
  6. import org.quartz.Job;
  7. import org.quartz.JobBuilder;
  8. import org.quartz.JobDetail;
  9. import org.quartz.JobKey;
  10. import org.quartz.Scheduler;
  11. import org.quartz.SchedulerException;
  12. import org.quartz.TriggerBuilder;
  13. import org.quartz.TriggerKey;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.web.bind.annotation.GetMapping;
  16. import org.springframework.web.bind.annotation.RestController;
  17. @RestController
  18. public class ScheduleController {
  19. @Autowired
  20. private Scheduler scheduler;
  21. @GetMapping("/add")
  22. public String add(String cron) throws SchedulerException {
  23. Class<? extends Job> jobClass = QuartzJob.class;
  24. // 构建job信息
  25. String jobId = UUID.randomUUID().toString();
  26. String jobGroup = "DEFAULT";
  27. JobKey jobkey = JobKey.jobKey(jobId, jobGroup);
  28. JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobkey).build();
  29. // 表达式调度构建器
  30. CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron).withMisfireHandlingInstructionFireAndProceed();
  31. // 按新的cronExpression表达式构建一个新的trigger
  32. CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(TriggerKey.triggerKey(jobId, jobGroup))
  33. .withSchedule(cronScheduleBuilder).build();
  34. // 放入参数,运行时的方法可以获取
  35. jobDetail.getJobDataMap().put("TASKNAME", "测试任务");
  36. jobDetail.getJobDataMap().put("TASKCONTENT", "测试任务内容");
  37. Date date = scheduler.scheduleJob(jobDetail, trigger);
  38. return "执行时间:"+date.toString();
  39. }
  40. }

7.测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/981739
推荐阅读
相关标签
  

闽ICP备14008679号