package com.zy.system.config; import org.springframework.stereotype.Component; import jakarta.annotation.PostConstruct; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.Statement; @Component public class LicenseSchemaInitializer { private final DataSource dataSource; public LicenseSchemaInitializer(DataSource dataSource) { this.dataSource = dataSource; } @PostConstruct public void init() { ensureColumn("sys_license_infos", "request_code", "VARCHAR(2048)"); } private void ensureColumn(String tableName, String columnName, String columnDefinition) { try (Connection connection = dataSource.getConnection()) { if (hasColumn(connection, tableName, columnName)) { return; } try (Statement statement = connection.createStatement()) { statement.executeUpdate("ALTER TABLE " + tableName + " ADD COLUMN " + columnName + " " + columnDefinition); } } catch (Exception ignored) { } } private boolean hasColumn(Connection connection, String tableName, String columnName) throws Exception { DatabaseMetaData metaData = connection.getMetaData(); try (ResultSet resultSet = metaData.getColumns(connection.getCatalog(), null, tableName, null)) { while (resultSet.next()) { if (columnName.equalsIgnoreCase(resultSet.getString("COLUMN_NAME"))) { return true; } } } return false; } }