From 28915148227980aec023bbd94bba5730859b6fde Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 29 Nov 2024 19:34:32 +0800 Subject: [PATCH] branch-3.0: [improvement](jdbc catalog) Optimize JDBC driver property settings #42923 (#44404) Cherry-picked from #42923 Co-authored-by: zy-kkk --- .../main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java | 6 +++++- .../java/org/apache/doris/jdbc/MySQLJdbcExecutor.java | 5 +++++ .../apache/doris/datasource/jdbc/client/JdbcClient.java | 6 +++++- .../doris/datasource/jdbc/client/JdbcMySQLClient.java | 8 ++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java index e05a7baa00899f..4a54ac2d4ce003 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/BaseJdbcExecutor.java @@ -71,6 +71,7 @@ public abstract class BaseJdbcExecutor implements JdbcExecutor { protected String jdbcDriverVersion; public BaseJdbcExecutor(byte[] thriftParams) throws Exception { + setJdbcDriverSystemProperties(); TJdbcExecutorCtorParams request = new TJdbcExecutorCtorParams(); TDeserializer deserializer = new TDeserializer(PROTOCOL_FACTORY); try { @@ -94,7 +95,6 @@ public BaseJdbcExecutor(byte[] thriftParams) throws Exception { .setConnectionPoolMaxLifeTime(request.connection_pool_max_life_time) .setConnectionPoolKeepAlive(request.connection_pool_keep_alive); JdbcDataSource.getDataSource().setCleanupInterval(request.connection_pool_cache_clear_time); - System.setProperty("com.zaxxer.hikari.useWeakReferences", "true"); init(config, request.statement); this.jdbcDriverVersion = getJdbcDriverVersion(); } @@ -147,6 +147,10 @@ protected void abortReadConnection(Connection connection, ResultSet resultSet) throws SQLException { } + protected void setJdbcDriverSystemProperties() { + System.setProperty("com.zaxxer.hikari.useWeakReferences", "true"); + } + public void cleanDataSource() { if (hikariDataSource != null) { hikariDataSource.close(); diff --git a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java index e94f2b22298072..4e5af95211b508 100644 --- a/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java +++ b/fe/be-java-extensions/jdbc-scanner/src/main/java/org/apache/doris/jdbc/MySQLJdbcExecutor.java @@ -50,6 +50,11 @@ public class MySQLJdbcExecutor extends BaseJdbcExecutor { public MySQLJdbcExecutor(byte[] thriftParams) throws Exception { super(thriftParams); + } + + @Override + protected void setJdbcDriverSystemProperties() { + super.setJdbcDriverSystemProperties(); System.setProperty("com.mysql.cj.disableAbandonedConnectionCleanup", "true"); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java index 458142ff518fe6..1ab32efddcc1ba 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClient.java @@ -100,7 +100,7 @@ public static JdbcClient createJdbcClient(JdbcClientConfig jdbcClientConfig) { } protected JdbcClient(JdbcClientConfig jdbcClientConfig) { - System.setProperty("com.zaxxer.hikari.useWeakReferences", "true"); + setJdbcDriverSystemProperties(); this.catalogName = jdbcClientConfig.getCatalog(); this.jdbcUser = jdbcClientConfig.getUser(); this.isOnlySpecifiedDatabase = Boolean.parseBoolean(jdbcClientConfig.getOnlySpecifiedDatabase()); @@ -117,6 +117,10 @@ protected JdbcClient(JdbcClientConfig jdbcClientConfig) { this.jdbcLowerCaseMetaMatching = new JdbcIdentifierMapping(isLowerCaseMetaNames, metaNamesMapping, this); } + protected void setJdbcDriverSystemProperties() { + System.setProperty("com.zaxxer.hikari.useWeakReferences", "true"); + } + // Initialize DataSource private void initializeDataSource(JdbcClientConfig config) { ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java index a8263f1621a3a8..b78589faa77380 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcMySQLClient.java @@ -46,8 +46,6 @@ public class JdbcMySQLClient extends JdbcClient { protected JdbcMySQLClient(JdbcClientConfig jdbcClientConfig) { super(jdbcClientConfig); - // Disable abandoned connection cleanup - System.setProperty("com.mysql.cj.disableAbandonedConnectionCleanup", "true"); convertDateToNull = isConvertDatetimeToNull(jdbcClientConfig); Connection conn = null; Statement stmt = null; @@ -74,6 +72,12 @@ protected JdbcMySQLClient(JdbcClientConfig jdbcClientConfig, String dbType) { this.dbType = dbType; } + @Override + protected void setJdbcDriverSystemProperties() { + super.setJdbcDriverSystemProperties(); + System.setProperty("com.mysql.cj.disableAbandonedConnectionCleanup", "true"); + } + @Override public List getDatabaseNameList() { Connection conn = null;