Commit f0f5b5215045e9e34ed51ce102d2bf2d174710ae
1 parent
08d39d45
默认禁用 quartz 依赖,保证启动速度
Showing
3 changed files
with
28 additions
and
4 deletions
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/config/YudaoQuartzAutoConfiguration.java
| 1 | package cn.iocoder.yudao.framework.quartz.config; | 1 | package cn.iocoder.yudao.framework.quartz.config; |
| 2 | 2 | ||
| 3 | import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; | 3 | import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; |
| 4 | +import lombok.extern.slf4j.Slf4j; | ||
| 4 | import org.quartz.Scheduler; | 5 | import org.quartz.Scheduler; |
| 5 | import org.springframework.boot.autoconfigure.AutoConfiguration; | 6 | import org.springframework.boot.autoconfigure.AutoConfiguration; |
| 6 | import org.springframework.context.annotation.Bean; | 7 | import org.springframework.context.annotation.Bean; |
| 7 | import org.springframework.scheduling.annotation.EnableScheduling; | 8 | import org.springframework.scheduling.annotation.EnableScheduling; |
| 8 | 9 | ||
| 10 | +import java.util.Optional; | ||
| 11 | + | ||
| 9 | /** | 12 | /** |
| 10 | * 定时任务 Configuration | 13 | * 定时任务 Configuration |
| 11 | */ | 14 | */ |
| 12 | @AutoConfiguration | 15 | @AutoConfiguration |
| 13 | @EnableScheduling // 开启 Spring 自带的定时任务 | 16 | @EnableScheduling // 开启 Spring 自带的定时任务 |
| 17 | +@Slf4j | ||
| 14 | public class YudaoQuartzAutoConfiguration { | 18 | public class YudaoQuartzAutoConfiguration { |
| 15 | 19 | ||
| 16 | @Bean | 20 | @Bean |
| 17 | - public SchedulerManager schedulerManager(Scheduler scheduler) { | ||
| 18 | - return new SchedulerManager(scheduler); | 21 | + public SchedulerManager schedulerManager(Optional<Scheduler> scheduler) { |
| 22 | + if (!scheduler.isPresent()) { | ||
| 23 | + log.info("[定时任务 - 已禁用][参考 https://doc.iocoder.cn/job/ 开启]"); | ||
| 24 | + return new SchedulerManager(null); | ||
| 25 | + } | ||
| 26 | + return new SchedulerManager(scheduler.get()); | ||
| 19 | } | 27 | } |
| 20 | 28 | ||
| 21 | } | 29 | } |
yudao-framework/yudao-spring-boot-starter-job/src/main/java/cn/iocoder/yudao/framework/quartz/core/scheduler/SchedulerManager.java
| @@ -4,6 +4,9 @@ import cn.iocoder.yudao.framework.quartz.core.enums.JobDataKeyEnum; | @@ -4,6 +4,9 @@ import cn.iocoder.yudao.framework.quartz.core.enums.JobDataKeyEnum; | ||
| 4 | import cn.iocoder.yudao.framework.quartz.core.handler.JobHandlerInvoker; | 4 | import cn.iocoder.yudao.framework.quartz.core.handler.JobHandlerInvoker; |
| 5 | import org.quartz.*; | 5 | import org.quartz.*; |
| 6 | 6 | ||
| 7 | +import static cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants.NOT_IMPLEMENTED; | ||
| 8 | +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception0; | ||
| 9 | + | ||
| 7 | /** | 10 | /** |
| 8 | * {@link org.quartz.Scheduler} 的管理器,负责创建任务 | 11 | * {@link org.quartz.Scheduler} 的管理器,负责创建任务 |
| 9 | * | 12 | * |
| @@ -37,6 +40,7 @@ public class SchedulerManager { | @@ -37,6 +40,7 @@ public class SchedulerManager { | ||
| 37 | public void addJob(Long jobId, String jobHandlerName, String jobHandlerParam, String cronExpression, | 40 | public void addJob(Long jobId, String jobHandlerName, String jobHandlerParam, String cronExpression, |
| 38 | Integer retryCount, Integer retryInterval) | 41 | Integer retryCount, Integer retryInterval) |
| 39 | throws SchedulerException { | 42 | throws SchedulerException { |
| 43 | + validateScheduler(); | ||
| 40 | // 创建 JobDetail 对象 | 44 | // 创建 JobDetail 对象 |
| 41 | JobDetail jobDetail = JobBuilder.newJob(JobHandlerInvoker.class) | 45 | JobDetail jobDetail = JobBuilder.newJob(JobHandlerInvoker.class) |
| 42 | .usingJobData(JobDataKeyEnum.JOB_ID.name(), jobId) | 46 | .usingJobData(JobDataKeyEnum.JOB_ID.name(), jobId) |
| @@ -61,6 +65,7 @@ public class SchedulerManager { | @@ -61,6 +65,7 @@ public class SchedulerManager { | ||
| 61 | public void updateJob(String jobHandlerName, String jobHandlerParam, String cronExpression, | 65 | public void updateJob(String jobHandlerName, String jobHandlerParam, String cronExpression, |
| 62 | Integer retryCount, Integer retryInterval) | 66 | Integer retryCount, Integer retryInterval) |
| 63 | throws SchedulerException { | 67 | throws SchedulerException { |
| 68 | + validateScheduler(); | ||
| 64 | // 创建新 Trigger 对象 | 69 | // 创建新 Trigger 对象 |
| 65 | Trigger newTrigger = this.buildTrigger(jobHandlerName, jobHandlerParam, cronExpression, retryCount, retryInterval); | 70 | Trigger newTrigger = this.buildTrigger(jobHandlerName, jobHandlerParam, cronExpression, retryCount, retryInterval); |
| 66 | // 修改调度 | 71 | // 修改调度 |
| @@ -74,6 +79,7 @@ public class SchedulerManager { | @@ -74,6 +79,7 @@ public class SchedulerManager { | ||
| 74 | * @throws SchedulerException 删除异常 | 79 | * @throws SchedulerException 删除异常 |
| 75 | */ | 80 | */ |
| 76 | public void deleteJob(String jobHandlerName) throws SchedulerException { | 81 | public void deleteJob(String jobHandlerName) throws SchedulerException { |
| 82 | + validateScheduler(); | ||
| 77 | scheduler.deleteJob(new JobKey(jobHandlerName)); | 83 | scheduler.deleteJob(new JobKey(jobHandlerName)); |
| 78 | } | 84 | } |
| 79 | 85 | ||
| @@ -84,6 +90,7 @@ public class SchedulerManager { | @@ -84,6 +90,7 @@ public class SchedulerManager { | ||
| 84 | * @throws SchedulerException 暂停异常 | 90 | * @throws SchedulerException 暂停异常 |
| 85 | */ | 91 | */ |
| 86 | public void pauseJob(String jobHandlerName) throws SchedulerException { | 92 | public void pauseJob(String jobHandlerName) throws SchedulerException { |
| 93 | + validateScheduler(); | ||
| 87 | scheduler.pauseJob(new JobKey(jobHandlerName)); | 94 | scheduler.pauseJob(new JobKey(jobHandlerName)); |
| 88 | } | 95 | } |
| 89 | 96 | ||
| @@ -94,6 +101,7 @@ public class SchedulerManager { | @@ -94,6 +101,7 @@ public class SchedulerManager { | ||
| 94 | * @throws SchedulerException 启动异常 | 101 | * @throws SchedulerException 启动异常 |
| 95 | */ | 102 | */ |
| 96 | public void resumeJob(String jobHandlerName) throws SchedulerException { | 103 | public void resumeJob(String jobHandlerName) throws SchedulerException { |
| 104 | + validateScheduler(); | ||
| 97 | scheduler.resumeJob(new JobKey(jobHandlerName)); | 105 | scheduler.resumeJob(new JobKey(jobHandlerName)); |
| 98 | scheduler.resumeTrigger(new TriggerKey(jobHandlerName)); | 106 | scheduler.resumeTrigger(new TriggerKey(jobHandlerName)); |
| 99 | } | 107 | } |
| @@ -108,11 +116,12 @@ public class SchedulerManager { | @@ -108,11 +116,12 @@ public class SchedulerManager { | ||
| 108 | */ | 116 | */ |
| 109 | public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam) | 117 | public void triggerJob(Long jobId, String jobHandlerName, String jobHandlerParam) |
| 110 | throws SchedulerException { | 118 | throws SchedulerException { |
| 119 | + validateScheduler(); | ||
| 120 | + // 触发任务 | ||
| 111 | JobDataMap data = new JobDataMap(); // 无需重试,所以不设置 retryCount 和 retryInterval | 121 | JobDataMap data = new JobDataMap(); // 无需重试,所以不设置 retryCount 和 retryInterval |
| 112 | data.put(JobDataKeyEnum.JOB_ID.name(), jobId); | 122 | data.put(JobDataKeyEnum.JOB_ID.name(), jobId); |
| 113 | data.put(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName); | 123 | data.put(JobDataKeyEnum.JOB_HANDLER_NAME.name(), jobHandlerName); |
| 114 | data.put(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam); | 124 | data.put(JobDataKeyEnum.JOB_HANDLER_PARAM.name(), jobHandlerParam); |
| 115 | - // 触发任务 | ||
| 116 | scheduler.triggerJob(new JobKey(jobHandlerName), data); | 125 | scheduler.triggerJob(new JobKey(jobHandlerName), data); |
| 117 | } | 126 | } |
| 118 | 127 | ||
| @@ -127,4 +136,11 @@ public class SchedulerManager { | @@ -127,4 +136,11 @@ public class SchedulerManager { | ||
| 127 | .build(); | 136 | .build(); |
| 128 | } | 137 | } |
| 129 | 138 | ||
| 139 | + private void validateScheduler() { | ||
| 140 | + if (scheduler == null) { | ||
| 141 | + throw exception0(NOT_IMPLEMENTED.getCode(), | ||
| 142 | + "[定时任务 - 已禁用][参考 https://doc.iocoder.cn/job/ 开启]"); | ||
| 143 | + } | ||
| 144 | + } | ||
| 145 | + | ||
| 130 | } | 146 | } |
yudao-server/src/main/resources/application-local.yaml
| @@ -9,6 +9,7 @@ spring: | @@ -9,6 +9,7 @@ spring: | ||
| 9 | exclude: | 9 | exclude: |
| 10 | - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 | 10 | - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 |
| 11 | - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration # 排除积木报表带来的 MongoDB 的自动配置 | 11 | - org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration # 排除积木报表带来的 MongoDB 的自动配置 |
| 12 | + - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置 | ||
| 12 | datasource: | 13 | datasource: |
| 13 | druid: # Druid 【监控】相关的全局配置 | 14 | druid: # Druid 【监控】相关的全局配置 |
| 14 | web-stat-filter: | 15 | web-stat-filter: |
| @@ -78,7 +79,6 @@ spring: | @@ -78,7 +79,6 @@ spring: | ||
| 78 | # Quartz 配置项,对应 QuartzProperties 配置类 | 79 | # Quartz 配置项,对应 QuartzProperties 配置类 |
| 79 | spring: | 80 | spring: |
| 80 | quartz: | 81 | quartz: |
| 81 | - auto-startup: false # 本地开发环境,尽量不要开启 Job | ||
| 82 | scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName | 82 | scheduler-name: schedulerName # Scheduler 名字。默认为 schedulerName |
| 83 | job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。 | 83 | job-store-type: jdbc # Job 存储器类型。默认为 memory 表示内存,可选 jdbc 使用数据库。 |
| 84 | wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true | 84 | wait-for-jobs-to-complete-on-shutdown: true # 应用关闭时,是否等待定时任务执行完成。默认为 false ,建议设置为 true |