From 953e505b8cfbce1b7f806610ef0e3c8a422a6120 Mon Sep 17 00:00:00 2001 From: trevzhang Date: Fri, 19 Jan 2024 17:19:58 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=88=B7=E6=96=B0=E4=B8=8A=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E8=B0=83=E5=BA=A6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dynamictp/core/monitor/DtpMonitor.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/dromara/dynamictp/core/monitor/DtpMonitor.java b/core/src/main/java/org/dromara/dynamictp/core/monitor/DtpMonitor.java index 6b9e813c7..1a07c0af7 100644 --- a/core/src/main/java/org/dromara/dynamictp/core/monitor/DtpMonitor.java +++ b/core/src/main/java/org/dromara/dynamictp/core/monitor/DtpMonitor.java @@ -34,6 +34,7 @@ import java.util.Set; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import static org.dromara.dynamictp.common.constant.DynamicTpConst.SCHEDULE_NOTIFY_ITEMS; @@ -51,13 +52,26 @@ public class DtpMonitor extends OnceApplicationContextEventListener { private final DtpProperties dtpProperties; + private ScheduledFuture monitorFuture; + + private int monitorInterval; + public DtpMonitor(DtpProperties dtpProperties) { this.dtpProperties = dtpProperties; } @Override - protected void onContextRefreshedEvent(ContextRefreshedEvent event) { - MONITOR_EXECUTOR.scheduleWithFixedDelay(this::run, + protected synchronized void onContextRefreshedEvent(ContextRefreshedEvent event) { + // if monitorInterval is same as before, do nothing. + if (monitorInterval == dtpProperties.getMonitorInterval()) { + return; + } + // cancel old monitor task. + if (monitorFuture != null) { + monitorFuture.cancel(true); + } + monitorInterval = dtpProperties.getMonitorInterval(); + monitorFuture = MONITOR_EXECUTOR.scheduleWithFixedDelay(this::run, 0, dtpProperties.getMonitorInterval(), TimeUnit.SECONDS); }