From 20b9d322b1711e608403a8e2fb03a311da9e0fa7 Mon Sep 17 00:00:00 2001 From: maoyuanming Date: Thu, 16 Feb 2023 23:56:24 +0800 Subject: [PATCH] [637][fix] Fixed mysql plugin auto create databases and tables --- .../main/resources/system-config.properties | 2 +- .../eagle/plugin/mysql/MySqlRecordSchema.java | 20 +++++++++++-------- .../plugin/mysql/MySqlStoragePlugin.java | 2 +- .../resources/conf/system-config.properties | 2 +- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/efak-common/src/main/resources/system-config.properties b/efak-common/src/main/resources/system-config.properties index 0e8ce1781..71af486d7 100644 --- a/efak-common/src/main/resources/system-config.properties +++ b/efak-common/src/main/resources/system-config.properties @@ -141,7 +141,7 @@ cluster1.efak.ssl.cgroup.topics= # kafka jdbc driver address ###################################### efak.driver=com.mysql.cj.jdbc.Driver -efak.url=jdbc:mysql://127.0.0.1:3306/ke_prd?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull +efak.url=jdbc:mysql://127.0.0.1:3306/ke_prd?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai efak.username=root efak.password=123456 #efak.driver=org.sqlite.JDBC diff --git a/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlRecordSchema.java b/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlRecordSchema.java index d308fdecd..79fa33522 100644 --- a/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlRecordSchema.java +++ b/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlRecordSchema.java @@ -47,17 +47,21 @@ public static void schema() { String url = SystemConfigUtils.getProperty("efak.url"); String username = SystemConfigUtils.getProperty("efak.username"); String password = SystemConfigUtils.getProperty("efak.password"); - String host = url.split("//")[1].split("/")[0].split(":")[0]; - String port = url.split("//")[1].split("/")[0].split(":")[1]; String db = url.split("//")[1].split("/")[1].split("\\?")[0]; + int prefixLength = url.split("//")[0].length() + + url.split("//")[1].split("/")[0].length() + "?".length() + + 3; + int dbNameLength = db.length(); + // exclude db: "jdbc:mysql://127.0.0.1:3306" + "?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" + String databaseUrl = url.substring(0, prefixLength - 2) + url.substring(prefixLength + dbNameLength - 1); - if (database(username, password, host, port, db)) { - tables(username, password, host, port, db); + if (database(username, password, databaseUrl, db)) { + tables(username, password, url); } } - private static void tables(String username, String password, String host, String port, String db) { - Connection connection = MySqlStoragePlugin.getInstance(host + ":" + port + "/" + db, username, password); + private static void tables(String username, String password, String url) { + Connection connection = MySqlStoragePlugin.getInstance(url, username, password); ResultSet rs = null; Statement stmt = null; List tbls = new ArrayList<>(); @@ -125,8 +129,8 @@ private static void tables(String username, String password, String host, String MySqlStoragePlugin.close(connection); } - private static boolean database(String username, String password, String host, String port, String db) { - Connection connection = MySqlStoragePlugin.getInstance(host + ":" + port, username, password); + private static boolean database(String username, String password, String databaseUrl, String db) { + Connection connection = MySqlStoragePlugin.getInstance(databaseUrl, username, password); ResultSet rs = null; List dbs = new ArrayList<>(); try { diff --git a/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlStoragePlugin.java b/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlStoragePlugin.java index f1edf71d5..5be03aa64 100644 --- a/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlStoragePlugin.java +++ b/efak-plugin/src/main/java/org/smartloli/kafka/eagle/plugin/mysql/MySqlStoragePlugin.java @@ -55,7 +55,7 @@ public class MySqlStoragePlugin { public static Connection getInstance(String address, String username, String password) { Connection connection = null; try { - connection = (Connection) DriverManager.getConnection("jdbc:mysql://" + address, username, password); + connection = (Connection) DriverManager.getConnection(address, username, password); } catch (Exception e) { LOG.error("Create mysql connection has error address[" + address + "],username[" + username + "],password[" + password + "],msg is " + e.getMessage()); } diff --git a/efak-web/src/main/resources/conf/system-config.properties b/efak-web/src/main/resources/conf/system-config.properties index 9c4c359f3..4c416e53a 100644 --- a/efak-web/src/main/resources/conf/system-config.properties +++ b/efak-web/src/main/resources/conf/system-config.properties @@ -122,7 +122,7 @@ cluster3.efak.ssl.cgroup.topics= # kafka mysql jdbc driver address ###################################### efak.driver=com.mysql.cj.jdbc.Driver -efak.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull +efak.url=jdbc:mysql://127.0.0.1:3306/ke?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai efak.username=root efak.password=123456