From 6bd28909aebc35cab1b25ba4e350153cc9145708 Mon Sep 17 00:00:00 2001 From: LamGC Date: Fri, 20 Aug 2021 13:59:06 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=B0=83=E6=95=B4=20Trigger=20?= =?UTF-8?q?=E6=8E=A5=E6=94=B6=E9=97=AD=E5=8C=85=E7=9A=84=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?,=20=E4=BB=A5=E4=BE=BF=E6=B7=BB=E5=8A=A0=E6=96=B0=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 调整 Trigger 接收闭包的类型(Runnable -> Closure), 闭包可传递参数, 且 Trigger 为 Groovy 特有(至少目前是这样), 故调整类型以提供更多灵活性. --- .../script/groovy/trigger/GroovyTrigger.java | 4 +++- .../script/groovy/trigger/OnceTrigger.java | 3 ++- .../script/groovy/trigger/TimerTrigger.java | 19 +++++++++++++++++-- .../groovy/trigger/BadAnnotationTrigger.java | 4 ---- .../groovy/trigger/BaseTestTrigger.java | 4 +++- 5 files changed, 25 insertions(+), 9 deletions(-) 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."); } }