diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/GroovyTrigger.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/GroovyTrigger.java index 352d4ad..fcca0ba 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/GroovyTrigger.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/GroovyTrigger.java @@ -17,4 +17,9 @@ public interface GroovyTrigger { */ void run(Closure> task); + /** + * 关闭触发器. + */ + void shutdown(); + } diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java index 85b3b02..a88216f 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/OnceTrigger.java @@ -27,4 +27,9 @@ public class OnceTrigger implements GroovyTrigger { public void run(Closure> task) { EXECUTOR.execute(task); } + + @Override + public void shutdown() { + // Nothing. + } } diff --git a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java index fa51423..892fc1a 100644 --- a/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java +++ b/src/main/java/net/lamgc/oracle/sentry/script/groovy/trigger/TimerTrigger.java @@ -8,6 +8,8 @@ import org.slf4j.LoggerFactory; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.scheduling.support.CronTrigger; +import java.util.concurrent.ScheduledFuture; + /** * @author LamGC */ @@ -28,6 +30,9 @@ public class TimerTrigger implements GroovyTrigger { SCHEDULER.initialize(); } + private CronTrigger trigger; + private ScheduledFuture> future; + /** * 设定定时时间. *
只允许在第一次执行时设置. @@ -59,7 +64,14 @@ public class TimerTrigger implements GroovyTrigger { return; } - SCHEDULER.schedule(new TimerTaskRunnable(runnable), trigger); + this.future = SCHEDULER.schedule(new TimerTaskRunnable(runnable), trigger); + } + + @Override + public void shutdown() { + if (this.future != null) { + future.cancel(false); + } } private static class TimerTaskRunnable implements Runnable {