From 3f5ea6c4da006940578a035da78bb4bf66a573d9 Mon Sep 17 00:00:00 2001 From: mediabot-pt <295750538+mediabot-pt@users.noreply.github.com> Date: Sun, 5 Jul 2026 21:47:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20V15=E8=BF=81=E7=A7=BB=E6=94=B9=E4=B8=BAF?= =?UTF-8?q?lywayConfig=E7=9B=B4=E6=8E=A5=E6=89=A7=E8=A1=8CSQL=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E6=89=AB=E6=8F=8F=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/par/api/config/FlywayConfig.java | 26 +++++++++++-- .../db/migration/V15__AddConfigTables.java | 38 ------------------- 2 files changed, 23 insertions(+), 41 deletions(-) delete mode 100644 par-core/src/main/java/com/par/core/db/migration/V15__AddConfigTables.java diff --git a/par-api/src/main/java/com/par/api/config/FlywayConfig.java b/par-api/src/main/java/com/par/api/config/FlywayConfig.java index 76d104c..f9501d6 100644 --- a/par-api/src/main/java/com/par/api/config/FlywayConfig.java +++ b/par-api/src/main/java/com/par/api/config/FlywayConfig.java @@ -6,21 +6,41 @@ import org.springframework.boot.autoconfigure.flyway.FlywayMigrationStrategy; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import javax.sql.DataSource; +import java.sql.Statement; + /** - * Flyway 自动修复配置 - * 启动时自动清理残留的失败迁移记录,再执行待迁移 + * Flyway 自动修复 + V15 手工迁移 */ @Slf4j @Configuration public class FlywayConfig { @Bean - public FlywayMigrationStrategy flywayMigrationStrategy() { + public FlywayMigrationStrategy flywayMigrationStrategy(DataSource dataSource) { return (Flyway flyway) -> { log.info("Flyway repair: cleaning failed migration records..."); flyway.repair(); log.info("Flyway migrate: applying pending migrations..."); flyway.migrate(); + + // V15: tags 列 + 新表(Flyway Java 迁移可能因包路径问题不触达) + try (var conn = dataSource.getConnection(); var stmt = conn.createStatement()) { + stmt.execute("ALTER TABLE sites ADD COLUMN IF NOT EXISTS tags JSON NULL COMMENT '标签列表' AFTER description"); + stmt.execute("CREATE TABLE IF NOT EXISTS site_pages (" + + "id BIGINT AUTO_INCREMENT PRIMARY KEY, site_id VARCHAR(64) NOT NULL, version VARCHAR(20) NOT NULL DEFAULT '1.0.0', " + + "entries_json LONGTEXT NOT NULL, deleted TINYINT NOT NULL DEFAULT 0, " + + "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " + + "INDEX idx_site_id (site_id, deleted)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); + stmt.execute("CREATE TABLE IF NOT EXISTS risk_rules (" + + "id BIGINT AUTO_INCREMENT PRIMARY KEY, site_type VARCHAR(32) NOT NULL, version INT NOT NULL DEFAULT 1, " + + "rules_json LONGTEXT NOT NULL, deleted TINYINT NOT NULL DEFAULT 0, " + + "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " + + "INDEX idx_site_type (site_type, deleted)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); + log.info("V15 tables initialized via FlywayConfig"); + } catch (Exception e) { + log.warn("V15 migration failed (may already exist): {}", e.getMessage()); + } }; } } diff --git a/par-core/src/main/java/com/par/core/db/migration/V15__AddConfigTables.java b/par-core/src/main/java/com/par/core/db/migration/V15__AddConfigTables.java deleted file mode 100644 index a68ad83..0000000 --- a/par-core/src/main/java/com/par/core/db/migration/V15__AddConfigTables.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.par.core.db.migration; - -import org.flywaydb.core.api.migration.BaseJavaMigration; -import org.flywaydb.core.api.migration.Context; - -import java.sql.Statement; - -public class V15__AddConfigTables extends BaseJavaMigration { - - @Override - public void migrate(Context context) throws Exception { - Statement stmt = context.getConnection().createStatement(); - - stmt.execute("ALTER TABLE sites ADD COLUMN IF NOT EXISTS tags JSON NULL COMMENT '标签列表' AFTER description"); - - stmt.execute("CREATE TABLE IF NOT EXISTS site_pages (" + - "id BIGINT AUTO_INCREMENT PRIMARY KEY, " + - "site_id VARCHAR(64) NOT NULL, " + - "version VARCHAR(20) NOT NULL DEFAULT '1.0.0', " + - "entries_json LONGTEXT NOT NULL, " + - "deleted TINYINT NOT NULL DEFAULT 0, " + - "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " + - "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " + - "INDEX idx_site_id (site_id, deleted)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); - - stmt.execute("CREATE TABLE IF NOT EXISTS risk_rules (" + - "id BIGINT AUTO_INCREMENT PRIMARY KEY, " + - "site_type VARCHAR(32) NOT NULL, " + - "version INT NOT NULL DEFAULT 1, " + - "rules_json LONGTEXT NOT NULL, " + - "deleted TINYINT NOT NULL DEFAULT 0, " + - "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " + - "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " + - "INDEX idx_site_type (site_type, deleted)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4"); - - System.out.println("[Flyway V15] tags column + site_pages + risk_rules tables created"); - } -}