فهرست منبع

Hikaricp连接池无法打印sql

yuxiaobin 7 سال پیش
والد
کامیت
532897d68c

+ 10 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/plugins/PerformanceInterceptor.java

@@ -56,6 +56,7 @@ public class PerformanceInterceptor implements Interceptor {
     private static final String DruidPooledPreparedStatement = "com.alibaba.druid.pool.DruidPooledPreparedStatement";
     private static final String T4CPreparedStatement = "oracle.jdbc.driver.T4CPreparedStatement";
     private static final String OraclePreparedStatementWrapper = "oracle.jdbc.driver.OraclePreparedStatementWrapper";
+    private static final String HikariPreparedStatementWrapper = "com.zaxxer.hikari.pool.HikariProxyPreparedStatement";
     /**
      * SQL 执行最大时长,超过自动停止运行,有助于发现问题。
      */
@@ -126,6 +127,15 @@ public class PerformanceInterceptor implements Interceptor {
             } catch (Exception e) {
                 //ignore
             }
+        } else if (HikariPreparedStatementWrapper.equals(stmtClassName)) {
+            try {
+                Object sqlStatement = SystemMetaObject.forObject(statement).getValue("delegate.sqlStatement");
+                if (sqlStatement != null) {
+                    originalSql = sqlStatement.toString();
+                }
+            } catch (Exception e) {
+                //ignore
+            }
         }
         if (originalSql == null) {
             originalSql = statement.toString();

+ 46 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/DBHikaricpH2Config.java

@@ -0,0 +1,46 @@
+package com.baomidou.mybatisplus.test.h2.config;
+
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.h2.Driver;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+
+/**
+ * <p>
+ * H2 Memory Database config
+ * </p>
+ *
+ * @author Caratacus
+ * @date 2017/4/1
+ */
+@Configuration
+@EnableTransactionManagement
+public class DBHikaricpH2Config {
+
+    @Bean
+    public DataSource dataSource() throws SQLException {
+        HikariConfig hikariConfig = new HikariConfig();
+        hikariConfig.setDriverClassName(Driver.class.getName());
+        hikariConfig.setUsername("sa");
+        hikariConfig.setPassword("");
+        hikariConfig.setJdbcUrl("jdbc:h2:mem:test;MODE=mysql;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
+//        dataSource.setJdbcUrl();
+//        dataSource.setUsername("sa");
+//        dataSource.setPassword("");
+        return new HikariDataSource(hikariConfig);
+    }
+
+    @Bean
+    public DataSourceTransactionManager transactionManager(DataSource ds) {
+        return new DataSourceTransactionManager(ds);
+    }
+
+}

+ 45 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/config/DBHikaricpMysqlConfig.java

@@ -0,0 +1,45 @@
+package com.baomidou.mybatisplus.test.h2.config;
+
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import com.zaxxer.hikari.HikariConfig;
+import com.zaxxer.hikari.HikariDataSource;
+
+/**
+ * <p>
+ * MySql Memory Database config
+ * </p>
+ *
+ * @author Caratacus
+ * @date 2017/4/1
+ */
+@Configuration
+@EnableTransactionManagement
+public class DBHikaricpMysqlConfig {
+
+    @Bean
+    public DataSource dataSource() throws SQLException {
+        HikariConfig hikariConfig = new HikariConfig();
+        hikariConfig.setDriverClassName("com.mysql.jdbc.Driver");
+        hikariConfig.setUsername("root");
+        hikariConfig.setPassword("");
+        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/mybatis-plus");
+//        dataSource.setJdbcUrl();
+//        dataSource.setUsername("sa");
+//        dataSource.setPassword("");
+        return new HikariDataSource(hikariConfig);
+    }
+
+    @Bean
+    public DataSourceTransactionManager transactionManager(DataSource ds) {
+        return new DataSourceTransactionManager(ds);
+    }
+
+}

+ 55 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/test/h2/hikaricp/H2HikaricpTest.java

@@ -0,0 +1,55 @@
+package com.baomidou.mybatisplus.test.h2.hikaricp;
+
+import java.io.IOException;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.test.h2.base.H2Test;
+import com.baomidou.mybatisplus.test.h2.config.DBHikaricpH2Config;
+import com.baomidou.mybatisplus.test.h2.config.MybatisConfigMetaObjOptLockConfig;
+import com.baomidou.mybatisplus.test.h2.entity.mapper.H2UserVersionAndLogicDeleteMapper;
+import com.baomidou.mybatisplus.test.h2.entity.persistent.H2UserVersionAndLogicDeleteEntity;
+
+/**
+ * <p>
+ * </p>
+ *
+ * @author yuxiaobin
+ * @date 2017/12/22
+ */
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = {DBHikaricpH2Config.class, MybatisConfigMetaObjOptLockConfig.class})
+public class H2HikaricpTest extends H2Test {
+
+    @BeforeClass
+    public static void initDB() throws SQLException, IOException {
+        @SuppressWarnings("resource")
+        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
+        context.register(DBHikaricpH2Config.class);
+        context.register(MybatisConfigMetaObjOptLockConfig.class);
+        context.refresh();
+        DataSource ds = (DataSource) context.getBean("dataSource");
+        try (Connection conn = ds.getConnection()) {
+            initData(conn);
+        }
+    }
+
+    @Autowired
+    H2UserVersionAndLogicDeleteMapper userMapper;
+
+    @Test
+    public void testPerformanceInteceptor(){
+        userMapper.selectList(new EntityWrapper<H2UserVersionAndLogicDeleteEntity>());
+    }
+}