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 330f63b..352d4ad 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 @@ -1,5 +1,7 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; +import groovy.lang.Closure; + /** * Groovy 脚本的触发器接口. *
实现该接口并添加 {@link TriggerName} 注解后, @@ -13,6 +15,6 @@ public interface GroovyTrigger { *
注意, 触发器执行 run 方法不可以阻塞方法返回. * @param task 触发器需要执行的任务. */ - void run(Runnable task); + void run(Closure> task); } 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 1971265..85b3b02 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 @@ -1,6 +1,7 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import groovy.lang.Closure; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,7 +24,7 @@ public class OnceTrigger implements GroovyTrigger { .build()); @Override - public void run(Runnable task) { + public void run(Closure> task) { EXECUTOR.execute(task); } } 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 556b749..a525d63 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 @@ -2,6 +2,7 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; import com.google.common.base.Throwables; import com.google.common.util.concurrent.ThreadFactoryBuilder; +import groovy.lang.Closure; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -38,7 +39,7 @@ public class TimerTrigger implements GroovyTrigger { } @Override - public void run(Runnable runnable) { + public void run(Closure> runnable) { if (trigger == null) { if (!log.isDebugEnabled()) { log.warn("脚本尚未设置 Cron 时间表达式, 任务将不会执行(堆栈信息请检查调试级别日志)."); @@ -57,7 +58,21 @@ public class TimerTrigger implements GroovyTrigger { return; } - SCHEDULER.schedule(runnable, trigger); + SCHEDULER.schedule(new TimerTaskRunnable(runnable), trigger); + } + + private static class TimerTaskRunnable implements Runnable { + + private final Closure> closure; + + private TimerTaskRunnable(Closure> closure) { + this.closure = closure; + } + + @Override + public void run() { + closure.call(); + } } } diff --git a/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BadAnnotationTrigger.java b/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BadAnnotationTrigger.java index 1d22388..8d2b474 100644 --- a/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BadAnnotationTrigger.java +++ b/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BadAnnotationTrigger.java @@ -2,8 +2,4 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; @TriggerName("") public class BadAnnotationTrigger extends BaseTestTrigger { - @Override - public void run(Runnable task) { - throw new UnsupportedOperationException("Unavailable trigger."); - } } diff --git a/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BaseTestTrigger.java b/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BaseTestTrigger.java index 1c6dd57..ea12520 100644 --- a/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BaseTestTrigger.java +++ b/src/test/java/net/lamgc/oracle/sentry/script/groovy/trigger/BaseTestTrigger.java @@ -1,8 +1,10 @@ package net.lamgc.oracle.sentry.script.groovy.trigger; +import groovy.lang.Closure; + public abstract class BaseTestTrigger implements GroovyTrigger { @Override - public void run(Runnable task) { + public void run(Closure> task) { throw new UnsupportedOperationException("Unavailable trigger."); } }