From bc01f0a680ef25bc9458f1a1a054879bcddf0005 Mon Sep 17 00:00:00 2001 From: LYC Date: Wed, 30 Apr 2025 18:55:50 +0800 Subject: [PATCH] =?UTF-8?q?[add]=20=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=A4=87?= =?UTF-8?q?=E7=94=A8=E6=95=B0=E6=8D=AE=E5=BA=93=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/database/MasterHealthChecker.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/main/java/com/waterquality/projectmanagement/config/database/MasterHealthChecker.java diff --git a/src/main/java/com/waterquality/projectmanagement/config/database/MasterHealthChecker.java b/src/main/java/com/waterquality/projectmanagement/config/database/MasterHealthChecker.java new file mode 100644 index 0000000..5f7f728 --- /dev/null +++ b/src/main/java/com/waterquality/projectmanagement/config/database/MasterHealthChecker.java @@ -0,0 +1,30 @@ +package com.waterquality.projectmanagement.config.database; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.Statement; + +@Component +public class MasterHealthChecker { + + @Autowired + @Qualifier("masterDataSource") + private DataSource masterDataSource; + + // 每60秒检查一次主库 + @Scheduled(fixedRate = 60000) + public void checkMasterHealth() { + try (Connection conn = masterDataSource.getConnection(); + Statement stmt = conn.createStatement()) { + stmt.execute("SELECT 1"); // 执行简单查询检测主库 + DynamicRoutingDataSource.setMasterAvailable(true); + } catch (Exception e) { + DynamicRoutingDataSource.setMasterAvailable(false); // 主库不可用 + } + } +} \ No newline at end of file