package com.mini.capi.job; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.mini.capi.biz.domain.BizMonitorHost; import com.mini.capi.biz.service.BizMonitorHostService; import com.mini.capi.utils.NetworkUtils; import jakarta.annotation.Resource; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Controller; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; @Controller public class jobController { @Resource private BizMonitorHostService bizMonitorHostService; // 注入配置好的线程池 @Resource(name = "hostMonitorExecutor") private ThreadPoolTaskExecutor hostMonitorExecutor; /** * */ @Scheduled(cron = "0 0/10 * * * ?") public void getJobMonitHostStatus() { List monitorHosts = bizMonitorHostService.list(); List> futures = new ArrayList<>(monitorHosts.size()); for (BizMonitorHost monitorHost : monitorHosts) { CompletableFuture future = CompletableFuture.runAsync(() -> { try { UpdateWrapper updateWrapper = new UpdateWrapper<>(); updateWrapper.eq("host_id", monitorHost.getHostId()); boolean isReachable = NetworkUtils.isNetworkReachable(monitorHost.getIpAddress()); monitorHost.setUstatus(isReachable ? "1" : "0"); if (isReachable) { monitorHost.setLastOnlineTime(LocalDateTime.now()); } bizMonitorHostService.update(monitorHost, updateWrapper); } catch (Exception e) { System.out.println(e.getMessage()); } }, hostMonitorExecutor); // 指定使用配置的线程池 futures.add(future); } try { CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) .get(60, TimeUnit.SECONDS); // 超时时间可根据业务调整 } catch (Exception e) { System.out.println(e.getMessage()); } } }