WANG před 5 roky
rodič
revize
791da424ce

+ 12 - 3
src/main/java/cn/com/qmth/examcloud/web/actuator/ApiStatusInfoHolder.java

@@ -2,6 +2,8 @@ package cn.com.qmth.examcloud.web.actuator;
 
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
 import org.springframework.boot.ApplicationArguments;
@@ -27,11 +29,16 @@ public class ApiStatusInfoHolder implements ApplicationRunner {
 
 	private static List<ApiStatusInfo> apiStatusInfoList = Lists.newArrayList();
 
+	private static AtomicBoolean running = new AtomicBoolean(false);
+
 	public static ApiStatusInfo getApiStatusInfo(String mapping) {
 		return apiStatusInfoMap.get(mapping);
 	}
 
 	public static List<ApiStatusInfo> getApiStatusInfoList() {
+		if (running.get()) {
+			return apiStatusInfoList;
+		}
 		refresh();
 		return apiStatusInfoList;
 	}
@@ -43,7 +50,7 @@ public class ApiStatusInfoHolder implements ApplicationRunner {
 			@Override
 			public void run() {
 				while (true) {
-					Util.sleep(10);
+					Util.sleep(5);
 					refresh();
 				}
 			}
@@ -52,6 +59,8 @@ public class ApiStatusInfoHolder implements ApplicationRunner {
 	}
 
 	private static synchronized void refresh() {
+
+		running.set(true);
 		try {
 			ReportorHolder.getApiDataReportor().report();
 			List<ReportInfo> reportInfoList = ReportorHolder.getApiDataReportor()
@@ -70,8 +79,8 @@ public class ApiStatusInfoHolder implements ApplicationRunner {
 		} catch (Exception e) {
 			LOG.error("fail to refresh API status.", e);
 		}
-
-		Util.sleep(1);
+		Util.sleep(TimeUnit.MILLISECONDS, 500);
+		running.set(false);
 	}
 
 }