Commit 168b63ca8bf9a01dc305031bb415ad83563282cd

Authored by YunaiV
1 parent dadb66c8

测试 Quartz 的代码

src/main/java/cn/iocoder/dashboard/framework/quartz/config/QuartzConfig.java
1 package cn.iocoder.dashboard.framework.quartz.config; 1 package cn.iocoder.dashboard.framework.quartz.config;
2 2
  3 +import cn.iocoder.dashboard.framework.quartz.core.scheduler.SchedulerManager;
  4 +import org.quartz.Scheduler;
  5 +import org.springframework.context.annotation.Bean;
3 import org.springframework.context.annotation.Configuration; 6 import org.springframework.context.annotation.Configuration;
4 import org.springframework.scheduling.annotation.EnableScheduling; 7 import org.springframework.scheduling.annotation.EnableScheduling;
5 8
6 @Configuration 9 @Configuration
7 @EnableScheduling // 开启 Spring 自带的定时任务 10 @EnableScheduling // 开启 Spring 自带的定时任务
8 public class QuartzConfig { 11 public class QuartzConfig {
  12 +
  13 + @Bean
  14 + public SchedulerManager schedulerManager(Scheduler scheduler) {
  15 + return new SchedulerManager(scheduler);
  16 + }
  17 +
9 } 18 }
src/main/java/cn/iocoder/dashboard/framework/quartz/core/handler/JobHandlerInvoker.java
@@ -36,14 +36,8 @@ public class JobHandlerInvoker extends QuartzJobBean { @@ -36,14 +36,8 @@ public class JobHandlerInvoker extends QuartzJobBean {
36 } 36 }
37 } 37 }
38 38
39 - @SuppressWarnings("SwitchStatementWithTooFewBranches")  
40 private static String getJobData(JobExecutionContext executionContext, JobDataKeyEnum key) { 39 private static String getJobData(JobExecutionContext executionContext, JobDataKeyEnum key) {
41 - switch (key) {  
42 - case JOB_ID:  
43 - return executionContext.getJobDetail().getJobDataMap().getString(key.name());  
44 - default:  
45 - return executionContext.getTrigger().getJobDataMap().getString(key.name());  
46 - } 40 + return executionContext.getMergedJobDataMap().getString(key.name());
47 } 41 }
48 42
49 } 43 }
src/main/java/cn/iocoder/dashboard/framework/quartz/core/scheduler/SchedulerManager.java
@@ -17,35 +17,25 @@ public class SchedulerManager { @@ -17,35 +17,25 @@ public class SchedulerManager {
17 this.scheduler = scheduler; 17 this.scheduler = scheduler;
18 } 18 }
19 19
20 - public void addJob(Long jobId, String jobHandlerName, String jobHandlerParam,  
21 - String triggerName, String cronExpression) 20 + public void addJob(Long jobId, String jobHandlerName, String jobHandlerParam, String cronExpression)
22 throws SchedulerException { 21 throws SchedulerException {
23 // 创建 JobDetail 对象 22 // 创建 JobDetail 对象
24 JobDetail jobDetail = JobBuilder.newJob(JobHandlerInvoker.class) 23 JobDetail jobDetail = JobBuilder.newJob(JobHandlerInvoker.class)
25 .usingJobData(JobDataKeyEnum.JOB_ID.name(), jobId) 24 .usingJobData(JobDataKeyEnum.JOB_ID.name(), jobId)
  25 + .usingJobData(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName)
26 .withIdentity(jobHandlerName).build(); 26 .withIdentity(jobHandlerName).build();
27 // 创建 Trigger 对象 27 // 创建 Trigger 对象
28 - Trigger trigger = TriggerBuilder.newTrigger()  
29 - .withIdentity(triggerName)  
30 - .usingJobData(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName)  
31 - .usingJobData(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam)  
32 - .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))  
33 - .build(); 28 + Trigger trigger = this.buildTrigger(jobHandlerName, jobHandlerParam, cronExpression);
34 // 新增调度 29 // 新增调度
35 scheduler.scheduleJob(jobDetail, trigger); 30 scheduler.scheduleJob(jobDetail, trigger);
36 } 31 }
37 32
38 - public void updateJob(String jobHandlerName, String jobHandlerParam,  
39 - String triggerName, String cronExpression) throws SchedulerException {  
40 - // 创建 Trigger 对象  
41 - Trigger trigger = TriggerBuilder.newTrigger()  
42 - .withIdentity(triggerName)  
43 - .usingJobData(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName)  
44 - .usingJobData(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam)  
45 - .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))  
46 - .build(); 33 + public void updateJob(String jobHandlerName, String jobHandlerParam, String cronExpression)
  34 + throws SchedulerException {
  35 + // 创建新 Trigger 对象
  36 + Trigger newTrigger = this.buildTrigger(jobHandlerName, jobHandlerParam, cronExpression);
47 // 修改调度 37 // 修改调度
48 - scheduler.rescheduleJob(new TriggerKey(triggerName), trigger); 38 + scheduler.rescheduleJob(new TriggerKey(jobHandlerName), newTrigger);
49 } 39 }
50 40
51 public void deleteJob(String jobHandlerName) throws SchedulerException { 41 public void deleteJob(String jobHandlerName) throws SchedulerException {
@@ -56,10 +46,9 @@ public class SchedulerManager { @@ -56,10 +46,9 @@ public class SchedulerManager {
56 scheduler.pauseJob(new JobKey(jobHandlerName)); 46 scheduler.pauseJob(new JobKey(jobHandlerName));
57 } 47 }
58 48
59 - public void resumeJob(String jobHandlerName,  
60 - String triggerName) throws SchedulerException { 49 + public void resumeJob(String jobHandlerName) throws SchedulerException {
61 scheduler.resumeJob(new JobKey(jobHandlerName)); 50 scheduler.resumeJob(new JobKey(jobHandlerName));
62 - scheduler.resumeTrigger(new TriggerKey(triggerName)); 51 + scheduler.resumeTrigger(new TriggerKey(jobHandlerName));
63 } 52 }
64 53
65 public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam) 54 public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam)
@@ -72,4 +61,12 @@ public class SchedulerManager { @@ -72,4 +61,12 @@ public class SchedulerManager {
72 scheduler.triggerJob(new JobKey(jobHandlerName), data); 61 scheduler.triggerJob(new JobKey(jobHandlerName), data);
73 } 62 }
74 63
  64 + private Trigger buildTrigger(String jobHandlerName, String jobHandlerParam, String cronExpression) {
  65 + return TriggerBuilder.newTrigger()
  66 + .withIdentity(jobHandlerName)
  67 + .usingJobData(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam)
  68 + .withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
  69 + .build();
  70 + }
  71 +
75 } 72 }
src/main/java/cn/iocoder/dashboard/modules/infra/dal/dataobject/job/InfJobDO.java
@@ -2,7 +2,6 @@ package cn.iocoder.dashboard.modules.infra.dal.dataobject.job; @@ -2,7 +2,6 @@ package cn.iocoder.dashboard.modules.infra.dal.dataobject.job;
2 2
3 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
4 import cn.iocoder.dashboard.modules.infra.enums.job.InfJobStatusEnum; 4 import cn.iocoder.dashboard.modules.infra.enums.job.InfJobStatusEnum;
5 -import com.baomidou.mybatisplus.annotation.TableField;  
6 import com.baomidou.mybatisplus.annotation.TableId; 5 import com.baomidou.mybatisplus.annotation.TableId;
7 import com.baomidou.mybatisplus.annotation.TableName; 6 import com.baomidou.mybatisplus.annotation.TableName;
8 import lombok.Data; 7 import lombok.Data;
@@ -32,11 +31,6 @@ public class InfJobDO extends BaseDO { @@ -32,11 +31,6 @@ public class InfJobDO extends BaseDO {
32 */ 31 */
33 private String name; 32 private String name;
34 /** 33 /**
35 - * 任务分组  
36 - */  
37 - @TableField("`group`")  
38 - private String group;  
39 - /**  
40 * 任务状态 34 * 任务状态
41 * 35 *
42 * 枚举 {@link InfJobStatusEnum} 36 * 枚举 {@link InfJobStatusEnum}
src/main/java/cn/iocoder/dashboard/modules/system/job/auth/SysUserSessionTimeoutJob.java 0 → 100644
  1 +package cn.iocoder.dashboard.modules.system.job.auth;
  2 +
  3 +import cn.iocoder.dashboard.common.pojo.CommonResult;
  4 +import cn.iocoder.dashboard.framework.quartz.core.handler.JobHandler;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.stereotype.Component;
  7 +
  8 +@Component
  9 +@Slf4j
  10 +public class SysUserSessionTimeoutJob implements JobHandler {
  11 +
  12 + @Override
  13 + public CommonResult<String> execute(String param) throws Exception {
  14 +// System.out.println("执行了一次任务");
  15 + log.info("[execute][执行任务:{}]", param);
  16 + return null;
  17 + }
  18 +
  19 +}
src/test/java/cn/iocoder/dashboard/framework/quartz/core/scheduler/SchedulerManagerTest.java 0 → 100644
  1 +package cn.iocoder.dashboard.framework.quartz.core.scheduler;
  2 +
  3 +import cn.hutool.core.util.StrUtil;
  4 +import cn.iocoder.dashboard.TestApplication;
  5 +import cn.iocoder.dashboard.modules.system.job.auth.SysUserSessionTimeoutJob;
  6 +import org.junit.jupiter.api.Test;
  7 +import org.quartz.SchedulerException;
  8 +import org.springframework.boot.test.context.SpringBootTest;
  9 +
  10 +import javax.annotation.Resource;
  11 +
  12 +import static org.junit.jupiter.api.Assertions.*;
  13 +
  14 +@SpringBootTest(classes = TestApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  15 +class SchedulerManagerTest {
  16 +
  17 + @Resource
  18 + private SchedulerManager schedulerManager;
  19 +
  20 + @Test
  21 + public void testAddJob() throws SchedulerException {
  22 + String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
  23 + schedulerManager.addJob(1L, jobHandlerName, "test", "0/10 * * * * ? *");
  24 + }
  25 +
  26 + @Test
  27 + public void testUpdateJob() throws SchedulerException {
  28 + String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
  29 + schedulerManager.updateJob(jobHandlerName, "hahaha", "0/20 * * * * ? *");
  30 + }
  31 +
  32 + @Test
  33 + public void testPauseJob() throws SchedulerException {
  34 + String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
  35 + schedulerManager.pauseJob(jobHandlerName);
  36 + }
  37 +
  38 + @Test
  39 + public void testResumeJob() throws SchedulerException {
  40 + String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
  41 + schedulerManager.resumeJob(jobHandlerName);
  42 + }
  43 +
  44 + @Test
  45 + public void testTriggerJob() throws SchedulerException {
  46 + String jobHandlerName = StrUtil.lowerFirst(SysUserSessionTimeoutJob.class.getSimpleName());
  47 + schedulerManager.triggerJob(1L, jobHandlerName, "niubi!!!");
  48 + }
  49 +
  50 +}