package com.zy.ai.config; import com.zy.ai.service.AiMcpMountService; import jakarta.annotation.PostConstruct; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; @Slf4j @Component public class AiMcpMountInitializer { private final DataSource dataSource; private final AiMcpMountService aiMcpMountService; public AiMcpMountInitializer(DataSource dataSource, AiMcpMountService aiMcpMountService) { this.dataSource = dataSource; this.aiMcpMountService = aiMcpMountService; } @PostConstruct public void init() { try (Connection connection = dataSource.getConnection()) { if (!hasTable(connection, "sys_ai_mcp_mount")) { log.warn("Skip AI MCP mount initialization because mount table does not exist"); return; } int changed = aiMcpMountService.initDefaultsIfMissing(); log.info("AI MCP mounts initialized, insertedOrRecovered={}", changed); } catch (Exception e) { log.warn("Failed to initialize AI MCP mounts", e); } } private boolean hasTable(Connection connection, String tableName) throws Exception { DatabaseMetaData metaData = connection.getMetaData(); try (ResultSet resultSet = metaData.getTables(connection.getCatalog(), null, tableName, new String[]{"TABLE"})) { while (resultSet.next()) { if (tableName.equalsIgnoreCase(resultSet.getString("TABLE_NAME"))) { return true; } } } return false; } }