import org.flywaydb.core.Flyway; import org.flywaydb.core.api.MigrationInfo; /** * Flyway 探针:默认只读(info),带 --migrate 才真的执行迁移。 * *

用法:java FlywayProbe <jdbc-url> [--migrate] [--locations=filesystem:...] [--no-validate] */ public class FlywayProbe { public static void main(String[] args) { String url = args[0]; boolean migrate = false; boolean validate = true; String locations = "classpath:db/migration"; boolean outOfOrder = false; for (String arg : args) { if ("--migrate".equals(arg)) migrate = true; if ("--no-validate".equals(arg)) validate = false; if ("--out-of-order".equals(arg)) outOfOrder = true; if (arg.startsWith("--locations=")) locations = arg.substring("--locations=".length()); } Flyway flyway = Flyway.configure() .dataSource(url, "root", "123456") .locations(locations) .baselineOnMigrate(true) .validateOnMigrate(validate) .outOfOrder(outOfOrder) .load(); System.out.println("locations=" + locations + " validateOnMigrate=" + validate + " outOfOrder=" + outOfOrder); System.out.println("== CURRENT =="); MigrationInfo current = flyway.info().current(); System.out.println(" 已应用到: " + (current == null ? "(空)" : current.getVersion() + " " + current.getDescription())); System.out.println("== PENDING =="); MigrationInfo[] pending = flyway.info().pending(); for (MigrationInfo info : pending) { System.out.println(" " + info.getVersion() + " | " + info.getDescription() + " | " + info.getType()); } System.out.println(" 共 " + pending.length + " 条待应用"); if (!migrate) { System.out.println("(只读模式,未执行迁移)"); return; } System.out.println("== MIGRATE =="); try { var result = flyway.migrate(); System.out.println(" 应用了 " + result.migrationsExecuted + " 条,目标版本 " + result.targetSchemaVersion + ",初始版本 " + result.initialSchemaVersion); } catch (Exception exception) { System.out.println(" !! 迁移失败:" + exception.getMessage()); } } }