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