This is an automated email from the ASF dual-hosted git repository.

peacewong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/linkis.git

commit 3c8f2aded9a0363cf80e39053e417129b4ed0690
Author: peacewong <[email protected]>
AuthorDate: Tue Mar 19 21:59:42 2024 +0800

    add connection pool keepalive feature
---
 .../java/org/apache/linkis/mybatis/DataSourceUtils.java  | 16 ++++++++++++++++
 .../apache/linkis/mybatis/conf/MybatisConfiguration.java |  5 +++++
 2 files changed, 21 insertions(+)

diff --git 
a/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceUtils.java
 
b/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceUtils.java
index 8def4f6a10..6c0a4508bc 100644
--- 
a/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceUtils.java
+++ 
b/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceUtils.java
@@ -24,6 +24,7 @@ import org.apache.commons.lang3.StringUtils;
 import javax.sql.DataSource;
 
 import com.alibaba.druid.pool.DruidDataSource;
+import com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,6 +72,11 @@ public class DataSourceUtils {
         
MybatisConfiguration.MYBATIS_DATASOURCE_REMOVE_ABANDONED_ENABLED.getValue();
     int removeAbandonedTimeout =
         
MybatisConfiguration.MYBATIS_DATASOURCE_REMOVE_ABANDONED_TIMEOUT.getValue();
+
+    boolean jdbcKeepAlive = 
MybatisConfiguration.MYBATIS_DATASOURCE_KEEPALIVE_ENABLED.getValue();
+
+    boolean jdbcUsePingMethod = 
MybatisConfiguration.MYBATIS_DATASOURCE_USE_PING_ENABLED.getValue();
+
     DruidDataSource datasource = new DruidDataSource();
     logger.info("Database connection address information(数据库连接地址信息)=" + dbUrl);
     datasource.setUrl(dbUrl);
@@ -87,6 +93,16 @@ public class DataSourceUtils {
     datasource.setTestWhileIdle(testWhileIdle);
     datasource.setTestOnBorrow(testOnBorrow);
     datasource.setTestOnReturn(testOnReturn);
+
+    datasource.setKeepAlive(jdbcKeepAlive);
+
+    if (!jdbcUsePingMethod) {
+      // use test sql for keepalive
+      MySqlValidConnectionChecker checker = new MySqlValidConnectionChecker();
+      checker.setUsePingMethod(false);
+      datasource.setValidConnectionChecker(checker);
+    }
+
     datasource.setPoolPreparedStatements(poolPreparedStatements);
     datasource.setRemoveAbandoned(removeAbandoned);
     datasource.setRemoveAbandonedTimeout(removeAbandonedTimeout);
diff --git 
a/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java
 
b/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java
index e127b9fd97..d200ab2e09 100644
--- 
a/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java
+++ 
b/linkis-commons/linkis-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java
@@ -63,6 +63,11 @@ public class MybatisConfiguration {
       
CommonVars.apply("wds.linkis.server.mybatis.datasource.poolPreparedStatements", 
Boolean.TRUE);
   public static final CommonVars<Boolean> 
MYBATIS_DATASOURCE_REMOVE_ABANDONED_ENABLED =
       CommonVars.apply("wds.linkis.server.mybatis.remove.abandoned.enabled", 
Boolean.TRUE);
+  public static final CommonVars<Boolean> MYBATIS_DATASOURCE_KEEPALIVE_ENABLED 
=
+      CommonVars.apply("linkis.server.mybatis.keepalive.enabled", 
Boolean.TRUE);
+  public static final CommonVars<Boolean> MYBATIS_DATASOURCE_USE_PING_ENABLED =
+      CommonVars.apply("linkis.server.mybatis.use.ping.enabled", Boolean.TRUE);
+
   public static final CommonVars<Integer> 
MYBATIS_DATASOURCE_REMOVE_ABANDONED_TIMEOUT =
       CommonVars.apply("wds.linkis.server.mybatis.remove.abandoned.timeout", 
300);
   public static final CommonVars<String> BDP_SERVER_MYBATIS_PAGEHELPER_DIALECT 
=


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to