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