import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /** * Apply lobster canonical menu sync to master + tenant DB(s). * Usage: * java -cp ".;lib/mysql-connector-j-8.0.33.jar" ApplyLobsterCanonicalMenus [tenantDb] */ public class ApplyLobsterCanonicalMenus { private static final String HOST = "cq-cdb-8fjmemkb.sql.tencentcdb.com:27220"; private static final String USER = "root"; private static final String PASS = "Ylrz_1q2w3e4r5t6y"; private static final String MASTER_DB = "ylrz_saas"; public static void main(String[] args) throws Exception { Class.forName("com.mysql.cj.jdbc.Driver"); String tenantDb = args.length > 0 ? args[0] : "fs_tenant_cs1"; Path tenantSql = Path.of("d:/ylrz_saas_new/java/fs-agent/src/main/resources/db/migration/tenant/V20260727_01__lobster_menu_canonical_sync.sql"); Path masterSql = Path.of("d:/ylrz_saas_new/java/sql/master/V20260727_01__lobster_menu_canonical_sync.sql"); System.out.println("=== MASTER " + MASTER_DB + " ==="); try (Connection c = open(MASTER_DB)) { exec(c, readSql(masterSql)); report(c, "tenant_sys_menu"); report(c, "tenant_company_menu"); } System.out.println("\n=== TENANT " + tenantDb + " ==="); try (Connection c = open(tenantDb)) { exec(c, readSql(tenantSql)); report(c, "sys_menu"); report(c, "company_menu"); } System.out.println("\nDone."); } private static String readSql(Path path) throws Exception { byte[] bytes = Files.readAllBytes(path); String sql = new String(bytes, StandardCharsets.UTF_8); if (!sql.isEmpty() && sql.charAt(0) == '') { sql = sql.substring(1); } return sql; } private static void exec(Connection c, String sql) throws Exception { try (Statement st = c.createStatement()) { st.execute(sql); } } private static void report(Connection c, String table) throws Exception { System.out.println("\n--- " + table + " ---"); String sql = "SELECT menu_id, menu_name, order_num, path FROM " + table + " WHERE menu_id=29900 OR parent_id=29900 ORDER BY order_num, menu_id"; try (Statement st = c.createStatement(); ResultSet rs = st.executeQuery(sql)) { while (rs.next()) { System.out.printf("[%d] order=%d | %s | %s%n", rs.getLong("menu_id"), rs.getInt("order_num"), rs.getString("menu_name"), rs.getString("path")); } } } private static Connection open(String db) throws Exception { return DriverManager.getConnection( "jdbc:mysql://" + HOST + "/" + db + "?useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8&allowMultiQueries=true", USER, PASS); } }