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;
|
}
|
}
|