feat: 为 GroovyTrigger 添加 shutdown 方法.

增加 shutdown 方法用于向触发器发出停止信号, 以后有用.
This commit is contained in:
LamGC 2021-09-02 14:26:05 +08:00
parent 2f225d27fe
commit 2cd679bcaf
Signed by: LamGC
GPG Key ID: 6C5AE2A913941E1D
3 changed files with 23 additions and 1 deletions

View File

@ -17,4 +17,9 @@ public interface GroovyTrigger {
*/
void run(Closure<?> task);
/**
* 关闭触发器.
*/
void shutdown();
}

View File

@ -27,4 +27,9 @@ public class OnceTrigger implements GroovyTrigger {
public void run(Closure<?> task) {
EXECUTOR.execute(task);
}
@Override
public void shutdown() {
// Nothing.
}
}

View File

@ -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;
/**
* 设定定时时间.
* <p> 只允许在第一次执行时设置.
@ -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 {