diff --git a/.gitignore b/.gitignore index 9382559..23b87f8 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ bin/ jdbc.properties **/target/ +.flattened-pom.xml diff --git a/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/JobLock.java b/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/JobLock.java index 92f8ccc..3a9fd4e 100644 --- a/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/JobLock.java +++ b/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/JobLock.java @@ -16,9 +16,11 @@ package com.aizuda.bpm.engine.scheduling; public interface JobLock { /** - * 进入锁 + * 进入锁(获取锁),立即返回,不会阻塞等待锁 + * + * @return true -> 获取到锁,false -> 未获取到锁 */ - void lock(); + boolean tryLock(); /** * 解除锁 diff --git a/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/LocalLock.java b/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/LocalLock.java index 5fcf8eb..c38d740 100644 --- a/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/LocalLock.java +++ b/flowlong-core/src/main/java/com/aizuda/bpm/engine/scheduling/LocalLock.java @@ -33,8 +33,8 @@ public class LocalLock implements JobLock { } @Override - public void lock() { - getLocalLock().lock(); + public boolean tryLock() { + return getLocalLock().tryLock(); } @Override diff --git a/flowlong-solon-plugin/src/main/java/com/aizuda/bpm/solon/adaptive/SolonScheduler.java b/flowlong-solon-plugin/src/main/java/com/aizuda/bpm/solon/adaptive/SolonScheduler.java index 634c09d..23cfcf5 100644 --- a/flowlong-solon-plugin/src/main/java/com/aizuda/bpm/solon/adaptive/SolonScheduler.java +++ b/flowlong-solon-plugin/src/main/java/com/aizuda/bpm/solon/adaptive/SolonScheduler.java @@ -13,6 +13,7 @@ import com.aizuda.bpm.engine.scheduling.RemindParam; import com.aizuda.bpm.engine.scheduling.TaskReminder; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import java.util.Date; import java.util.List; @@ -27,6 +28,7 @@ import java.util.List; * @author noear * @since 1.0 */ +@Slf4j @Setter @Getter public class SolonScheduler { @@ -53,7 +55,10 @@ public class SolonScheduler { */ public void remind() { try { - jobLock.lock(); + if (!jobLock.tryLock()) { + log.info("[FlowLong] remind is already running, just return."); + return; + } TaskService taskService = context.getTaskService(); List flwTaskList = taskService.getTimeoutOrRemindTasks(); if (ObjectUtils.isNotEmpty(flwTaskList)) { diff --git a/flowlong-spring-boot-starter/src/main/java/com/aizuda/bpm/spring/adaptive/SpringBootScheduler.java b/flowlong-spring-boot-starter/src/main/java/com/aizuda/bpm/spring/adaptive/SpringBootScheduler.java index 92043a4..2da08c1 100644 --- a/flowlong-spring-boot-starter/src/main/java/com/aizuda/bpm/spring/adaptive/SpringBootScheduler.java +++ b/flowlong-spring-boot-starter/src/main/java/com/aizuda/bpm/spring/adaptive/SpringBootScheduler.java @@ -10,6 +10,7 @@ import com.aizuda.bpm.engine.scheduling.RemindParam; import com.aizuda.bpm.engine.scheduling.TaskReminder; import lombok.Getter; import lombok.Setter; +import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.SchedulingConfigurer; import org.springframework.scheduling.config.ScheduledTaskRegistrar; import org.springframework.scheduling.support.CronTrigger; @@ -28,6 +29,7 @@ import java.util.List; * @author hubin * @since 1.0 */ +@Slf4j @Getter @Setter public class SpringBootScheduler implements SchedulingConfigurer { @@ -53,7 +55,10 @@ public class SpringBootScheduler implements SchedulingConfigurer { */ public void remind() { try { - jobLock.lock(); + if (!jobLock.tryLock()) { + log.info("[FlowLong] remind is already running, just return."); + return; + } TaskService taskService = context.getTaskService(); List flwTaskList = taskService.getTimeoutOrRemindTasks(); if (ObjectUtils.isNotEmpty(flwTaskList)) {