Commit 168b63ca8bf9a01dc305031bb415ad83563282cd

Authored by YunaiV
1 parent dadb66c8

测试 Quartz 的代码

src/main/java/cn/iocoder/dashboard/framework/quartz/config/QuartzConfig.java
1 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 6 import org.springframework.context.annotation.Configuration;
4 7 import org.springframework.scheduling.annotation.EnableScheduling;
5 8  
6 9 @Configuration
7 10 @EnableScheduling // 开启 Spring 自带的定时任务
8 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 36 }
37 37 }
38 38  
39   - @SuppressWarnings("SwitchStatementWithTooFewBranches")
40 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 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 21 throws SchedulerException {
23 22 // 创建 JobDetail 对象
24 23 JobDetail jobDetail = JobBuilder.newJob(JobHandlerInvoker.class)
25 24 .usingJobData(JobDataKeyEnum.JOB_ID.name(), jobId)
  25 + .usingJobData(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName)
26 26 .withIdentity(jobHandlerName).build();
27 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 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 41 public void deleteJob(String jobHandlerName) throws SchedulerException {
... ... @@ -56,10 +46,9 @@ public class SchedulerManager {
56 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 50 scheduler.resumeJob(new JobKey(jobHandlerName));
62   - scheduler.resumeTrigger(new TriggerKey(triggerName));
  51 + scheduler.resumeTrigger(new TriggerKey(jobHandlerName));
63 52 }
64 53  
65 54 public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam)
... ... @@ -72,4 +61,12 @@ public class SchedulerManager {
72 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 2  
3 3 import cn.iocoder.dashboard.framework.mybatis.core.dataobject.BaseDO;
4 4 import cn.iocoder.dashboard.modules.infra.enums.job.InfJobStatusEnum;
5   -import com.baomidou.mybatisplus.annotation.TableField;
6 5 import com.baomidou.mybatisplus.annotation.TableId;
7 6 import com.baomidou.mybatisplus.annotation.TableName;
8 7 import lombok.Data;
... ... @@ -32,11 +31,6 @@ public class InfJobDO extends BaseDO {
32 31 */
33 32 private String name;
34 33 /**
35   - * 任务分组
36   - */
37   - @TableField("`group`")
38   - private String group;
39   - /**
40 34 * 任务状态
41 35 *
42 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 +}
... ...