mirror of
https://github.com/LamGC/Oracle-Sentry.git
synced 2025-04-29 14:17:34 +00:00
refactor: 调整 Trigger 接收闭包的类型, 以便添加新的功能.
调整 Trigger 接收闭包的类型(Runnable -> Closure), 闭包可传递参数, 且 Trigger 为 Groovy 特有(至少目前是这样), 故调整类型以提供更多灵活性.
This commit is contained in:
parent
cbb1784f5e
commit
6bd28909ae
@ -1,5 +1,7 @@
|
||||
package net.lamgc.oracle.sentry.script.groovy.trigger;
|
||||
|
||||
import groovy.lang.Closure;
|
||||
|
||||
/**
|
||||
* Groovy 脚本的触发器接口.
|
||||
* <p> 实现该接口并添加 {@link TriggerName} 注解后,
|
||||
@ -13,6 +15,6 @@ public interface GroovyTrigger {
|
||||
* <p> 注意, 触发器执行 run 方法不可以阻塞方法返回.
|
||||
* @param task 触发器需要执行的任务.
|
||||
*/
|
||||
void run(Runnable task);
|
||||
void run(Closure<?> task);
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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.");
|
||||
}
|
||||
}
|
||||
|
@ -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.");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user