Browse Source

清除无用定时任务,添加定时任务去重代码,防止定时任务添加重复

OPGame 6 years ago
parent
commit
5e173375df

File diff suppressed because it is too large
+ 71 - 134
db/yami_shop.sql


+ 6 - 0
yami-shop-quartz/src/main/java/com/yami/shop/quartz/config/ScheduleManager.java

@@ -94,6 +94,12 @@ public class ScheduleManager {
 
             CronTrigger trigger = getCronTrigger(scheduleJob);
 
+            // 如果定时任务不存在,则创建定时任务
+            if (trigger == null) {
+                createScheduleJob(scheduleJob);
+                return;
+            }
+
             //按新的cronExpression表达式重新构建trigger
             trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
 

+ 13 - 0
yami-shop-quartz/src/main/java/com/yami/shop/quartz/controller/ScheduleJobController.java

@@ -14,6 +14,7 @@ import javax.validation.Valid;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.yami.shop.common.exception.YamiShopBindException;
 import com.yami.shop.quartz.model.ScheduleJob;
 import com.yami.shop.quartz.service.ScheduleJobService;
 import lombok.extern.slf4j.Slf4j;
@@ -76,6 +77,12 @@ public class ScheduleJobController {
 	@PostMapping
 	@PreAuthorize("@pms.hasPermission('sys:schedule:save')")
 	public ResponseEntity<Void> save(@RequestBody @Valid ScheduleJob scheduleJob){
+
+		int dbAlikeCount = scheduleJobService.count(new LambdaQueryWrapper<ScheduleJob>().eq(ScheduleJob::getBeanName, scheduleJob.getBeanName()).eq(ScheduleJob::getMethodName, scheduleJob.getMethodName()));
+		if (dbAlikeCount > 0) {
+			throw new YamiShopBindException("定时任务已存在");
+		}
+
 		scheduleJobService.saveAndStart(scheduleJob);
 		return ResponseEntity.ok().build();
 	}
@@ -87,6 +94,12 @@ public class ScheduleJobController {
 	@PutMapping
 	@PreAuthorize("@pms.hasPermission('sys:schedule:update')")
 	public ResponseEntity<Void> update(@RequestBody @Valid ScheduleJob scheduleJob){
+
+		int dbAlikeCount = scheduleJobService.count(new LambdaQueryWrapper<ScheduleJob>().eq(ScheduleJob::getBeanName, scheduleJob.getBeanName()).eq(ScheduleJob::getMethodName, scheduleJob.getMethodName()).ne(ScheduleJob::getJobId,scheduleJob.getJobId()));
+		if (dbAlikeCount > 0) {
+			throw new YamiShopBindException("定时任务已存在");
+		}
+
 		scheduleJobService.updateScheduleJob(scheduleJob);
 		
 		return ResponseEntity.ok().build();

Some files were not shown because too many files changed in this diff