diff --git a/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java b/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java index be16a48..dd259b6 100644 --- a/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java +++ b/src/main/java/com/tongran/agentserver/scheduler/service/AppInitializer.java @@ -1,5 +1,6 @@ package com.tongran.agentserver.scheduler.service; +import com.tongran.agentserver.utils.AgentUtil; import com.tongran.agentserver.utils.AssertLog; import org.springframework.boot.CommandLineRunner; import org.springframework.context.annotation.Lazy; @@ -57,10 +58,13 @@ public class AppInitializer implements CommandLineRunner { dynamicTaskService.scheduleTask("memory", businessTasks::memoryTask, 55000, 300000); // 55秒后开始,每300秒执行 + + //获取当前时间距离下一个“分钟为 0 或 5”的时间点还差多少秒 + long seconds = AgentUtil.secondsToNext5Minute() * 1000; // 每300秒执行网络信息采集任务 - AssertLog.info("初始化启动网络信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 65000, 300000); + AssertLog.info("初始化启动网络信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", seconds, 300000); dynamicTaskService.scheduleTask("net", - businessTasks::netTask, 65000, 300000); // 65秒后开始,每300秒执行 + businessTasks::netTask, seconds, 300000); // 65秒后开始,每300秒执行 // 每300秒执行挂载信息采集任务 AssertLog.info("初始化启动挂载信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 75000, 300000); @@ -68,9 +72,9 @@ public class AppInitializer implements CommandLineRunner { businessTasks::pointTask, 75000, 300000); // 75秒后开始,每300秒执行 // 每300秒执行交换机信息采集任务 - AssertLog.info("初始化启动交换机信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", 85000, 300000); + AssertLog.info("初始化启动交换机信息采集定时任务 - 延迟: {}ms, 间隔: {}ms", seconds, 300000); dynamicTaskService.scheduleTask("switchBoard", - businessTasks::switchBoardTask, 85000, 300000); // 85秒后开始,每300秒执行 + businessTasks::switchBoardTask, seconds, 300000); // 85秒后开始,每300秒执行 } diff --git a/src/main/java/com/tongran/agentserver/utils/AgentUtil.java b/src/main/java/com/tongran/agentserver/utils/AgentUtil.java index 4e10142..9293ed1 100644 --- a/src/main/java/com/tongran/agentserver/utils/AgentUtil.java +++ b/src/main/java/com/tongran/agentserver/utils/AgentUtil.java @@ -8,6 +8,8 @@ import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; import java.net.UnknownHostException; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; import java.util.Base64; import java.util.Enumeration; import java.util.List; @@ -103,4 +105,30 @@ public class AgentUtil { } } + /** + * 获取当前时间距离下一个“分钟为 0 或 5”的时间点还差多少秒 + * 例如:xx:00, xx:05, xx:10, ..., xx:55 + */ + public static long secondsToNext5Minute() { + LocalDateTime now = LocalDateTime.now(); + + // 当前分钟 + int minute = now.getMinute(); + + // 计算下一个 5 分钟整点(向上取整到 5 的倍数) + int nextMinute = ((minute / 5) + 1) * 5; // 例如:12 → 15, 17 → 20, 58 → 60 + + LocalDateTime nextTime; + if (nextMinute < 60) { + // 在当前小时内 + nextTime = now.withMinute(nextMinute).withSecond(0).withNano(0); + } else { + // 跨小时,例如 10:58 → 11:00 + nextTime = now.plusHours(1).withMinute(0).withSecond(0).withNano(0); + } + + // 计算相差的秒数 + return ChronoUnit.SECONDS.between(now, nextTime); + } + }