61 lines
2.3 KiB
Java
61 lines
2.3 KiB
Java
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<BizMonitorHost> monitorHosts = bizMonitorHostService.list();
|
|
List<CompletableFuture<Void>> futures = new ArrayList<>(monitorHosts.size());
|
|
for (BizMonitorHost monitorHost : monitorHosts) {
|
|
CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
|
|
try {
|
|
UpdateWrapper<BizMonitorHost> 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());
|
|
}
|
|
}
|
|
}
|