You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ki...@apache.org on 2020/09/05 09:26:02 UTC

[shardingsphere] branch master updated: Use HikariJDBCParameterDecorator on JDBCRawBackendDataSourceFactory (#7265)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2d0e0a5  Use HikariJDBCParameterDecorator on JDBCRawBackendDataSourceFactory (#7265)
2d0e0a5 is described below

commit 2d0e0a52cc891573505f623bf170884e5cd32b0f
Author: Liang Zhang <te...@163.com>
AuthorDate: Sat Sep 5 17:25:46 2020 +0800

    Use HikariJDBCParameterDecorator on JDBCRawBackendDataSourceFactory (#7265)
    
    * Move HikariJDBCParameterDecorator
    
    * Refactor JDBCRawBackendDataSourceFactory
    
    * For code style
    
    * add new package for proxy's datasource
---
 .../config/datasource/DataSourceConfiguration.java |  1 -
 .../decorator}/HikariJDBCParameterDecorator.java   |  4 +--
 .../JDBCBackendDataSourceFactory.java              |  2 +-
 .../JDBCRawBackendDataSourceFactory.java           | 33 ++++++++++++----------
 .../backend/schema/ProxyDataSourceContext.java     |  2 +-
 ....infra.config.datasource.JDBCParameterDecorator |  2 +-
 .../backend/schema/ProxyDataSourceContextTest.java | 12 ++++----
 7 files changed, 29 insertions(+), 27 deletions(-)

diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/datasource/DataSourceConfiguration.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/datasource/DataSourceConfiguration.java
index 2f8b8e1..ede6e3d 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/datasource/DataSourceConfiguration.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/datasource/DataSourceConfiguration.java
@@ -123,7 +123,6 @@ public final class DataSourceConfiguration {
     @SuppressWarnings("rawtypes")
     private Optional<JDBCParameterDecorator> findJDBCParameterDecorator(final DataSource dataSource) {
         return ShardingSphereServiceLoader.newServiceInstances(JDBCParameterDecorator.class).stream().filter(each -> each.getType() == dataSource.getClass()).findFirst();
-        
     }
     
     private Optional<Method> findSetterMethod(final Method[] methods, final String property) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/datasource/HikariJDBCParameterDecorator.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/decorator/HikariJDBCParameterDecorator.java
similarity index 95%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/datasource/HikariJDBCParameterDecorator.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/decorator/HikariJDBCParameterDecorator.java
index 95e4201..0e08d15 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/datasource/HikariJDBCParameterDecorator.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/decorator/HikariJDBCParameterDecorator.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.datasource;
+package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.decorator;
 
 import com.zaxxer.hikari.HikariDataSource;
 import org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecorator;
@@ -28,7 +28,7 @@ public final class HikariJDBCParameterDecorator implements JDBCParameterDecorato
     @Override
     public void decorate(final HikariDataSource dataSource) {
         dataSource.getDataSourceProperties().setProperty("useServerPrepStmts", Boolean.TRUE.toString());
-        dataSource.getDataSourceProperties().setProperty("cachePrepStmts", "true");
+        dataSource.getDataSourceProperties().setProperty("cachePrepStmts", Boolean.TRUE.toString());
         dataSource.getDataSourceProperties().setProperty("prepStmtCacheSize", "250");
         dataSource.getDataSourceProperties().setProperty("prepStmtCacheSqlLimit", "2048");
         dataSource.getDataSourceProperties().setProperty("useLocalSessionState", Boolean.TRUE.toString());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/factory/JDBCBackendDataSourceFactory.java
similarity index 98%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceFactory.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/factory/JDBCBackendDataSourceFactory.java
index e360e3f..eba80ca 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCBackendDataSourceFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/factory/JDBCBackendDataSourceFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource;
+package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.factory;
 
 import org.apache.shardingsphere.infra.context.schema.DataSourceParameter;
 
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCRawBackendDataSourceFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/factory/JDBCRawBackendDataSourceFactory.java
similarity index 76%
rename from shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCRawBackendDataSourceFactory.java
rename to shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/factory/JDBCRawBackendDataSourceFactory.java
index b5ddecf..2405c82 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/JDBCRawBackendDataSourceFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/datasource/factory/JDBCRawBackendDataSourceFactory.java
@@ -15,17 +15,20 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource;
+package org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.factory;
 
 import com.zaxxer.hikari.HikariConfig;
 import com.zaxxer.hikari.HikariDataSource;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.exception.ShardingSphereException;
+import org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecorator;
 import org.apache.shardingsphere.infra.context.schema.DataSourceParameter;
+import org.apache.shardingsphere.infra.exception.ShardingSphereException;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.recognizer.JDBCDriverURLRecognizerEngine;
 
 import javax.sql.DataSource;
+import java.util.Optional;
 
 /**
  * Backend data source factory using {@code HikariDataSource} for JDBC raw.
@@ -35,6 +38,10 @@ public final class JDBCRawBackendDataSourceFactory implements JDBCBackendDataSou
     
     private static final JDBCRawBackendDataSourceFactory INSTANCE = new JDBCRawBackendDataSourceFactory();
     
+    static {
+        ShardingSphereServiceLoader.register(JDBCParameterDecorator.class);
+    }
+    
     /**
      * Get instance of {@code JDBCBackendDataSourceFactory}.
      *
@@ -44,6 +51,7 @@ public final class JDBCRawBackendDataSourceFactory implements JDBCBackendDataSou
         return INSTANCE;
     }
     
+    @SuppressWarnings("unchecked")
     @Override
     public DataSource build(final String dataSourceName, final DataSourceParameter dataSourceParameter) {
         HikariConfig config = new HikariConfig();
@@ -59,19 +67,9 @@ public final class JDBCRawBackendDataSourceFactory implements JDBCBackendDataSou
         config.setMaximumPoolSize(dataSourceParameter.getMaxPoolSize());
         config.setMinimumIdle(dataSourceParameter.getMinPoolSize());
         config.setReadOnly(dataSourceParameter.isReadOnly());
-        config.addDataSourceProperty("useServerPrepStmts", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cachePrepStmts", "true");
-        config.addDataSourceProperty("prepStmtCacheSize", 250);
-        config.addDataSourceProperty("prepStmtCacheSqlLimit", 2048);
-        config.addDataSourceProperty("useLocalSessionState", Boolean.TRUE.toString());
-        config.addDataSourceProperty("rewriteBatchedStatements", Boolean.TRUE.toString());
-        config.addDataSourceProperty("cacheResultSetMetadata", Boolean.FALSE.toString());
-        config.addDataSourceProperty("cacheServerConfiguration", Boolean.TRUE.toString());
-        config.addDataSourceProperty("elideSetAutoCommits", Boolean.TRUE.toString());
-        config.addDataSourceProperty("maintainTimeStats", Boolean.FALSE.toString());
-        config.addDataSourceProperty("netTimeoutForStreamingResults", 0);
-        config.addDataSourceProperty("tinyInt1isBit", Boolean.FALSE.toString());
-        return new HikariDataSource(config);
+        DataSource result = new HikariDataSource(config);
+        findJDBCParameterDecorator(result).ifPresent(decorator -> decorator.decorate(result));
+        return result;
     }
     
     private void validateDriverClassName(final String driverClassName) {
@@ -81,4 +79,9 @@ public final class JDBCRawBackendDataSourceFactory implements JDBCBackendDataSou
             throw new ShardingSphereException("Cannot load JDBC driver class `%s`, make sure it in ShardingSphere-Proxy's classpath.", driverClassName);
         }
     }
+    
+    @SuppressWarnings("rawtypes")
+    private Optional<JDBCParameterDecorator> findJDBCParameterDecorator(final DataSource dataSource) {
+        return ShardingSphereServiceLoader.newServiceInstances(JDBCParameterDecorator.class).stream().filter(each -> each.getType() == dataSource.getClass()).findFirst();
+    }
 }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContext.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContext.java
index 4972826..1c26bc6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContext.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContext.java
@@ -23,7 +23,7 @@ import org.apache.shardingsphere.infra.database.type.DatabaseTypes;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import org.apache.shardingsphere.infra.context.schema.DataSourceParameter;
-import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.JDBCRawBackendDataSourceFactory;
+import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.factory.JDBCRawBackendDataSourceFactory;
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.recognizer.JDBCDriverURLRecognizerEngine;
 
 import javax.sql.DataSource;
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecorator b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecorator
index dcca2d2..d864fed 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecorator
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.config.datasource.JDBCParameterDecorator
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.proxy.backend.datasource.HikariJDBCParameterDecorator
+org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.decorator.HikariJDBCParameterDecorator
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContextTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContextTest.java
index a6b94c8..2fff35a 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContextTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/schema/ProxyDataSourceContextTest.java
@@ -21,7 +21,7 @@ import com.zaxxer.hikari.HikariDataSource;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
 import org.apache.shardingsphere.infra.context.schema.DataSourceParameter;
-import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.JDBCRawBackendDataSourceFactory;
+import org.apache.shardingsphere.proxy.backend.communication.jdbc.datasource.factory.JDBCRawBackendDataSourceFactory;
 import org.junit.Test;
 
 import java.lang.reflect.Field;
@@ -40,7 +40,7 @@ import static org.mockito.Mockito.when;
 import static org.mockito.Mockito.reset;
 
 public final class ProxyDataSourceContextTest {
-
+    
     @Test
     public void assertEmptySchemaDataSources() {
         Map<String, Map<String, DataSourceParameter>> schemaDataSources = new HashMap<>();
@@ -48,7 +48,7 @@ public final class ProxyDataSourceContextTest {
         assertThat(proxyDataSourceContext.getDatabaseType(), instanceOf(MySQLDatabaseType.class));
         assertTrue(proxyDataSourceContext.getDataSourcesMap().isEmpty());
     }
-
+    
     @Test(expected = ShardingSphereException.class)
     public void assertWrongSchemaDataSources() {
         DataSourceParameter dataSourceParameter = new DataSourceParameter();
@@ -59,7 +59,7 @@ public final class ProxyDataSourceContextTest {
         schemaDataSources.put("order", dataSourceParameterMap);
         new ProxyDataSourceContext(schemaDataSources);
     }
-
+    
     @Test(expected = ShardingSphereException.class)
     public void assertThrowByBuild() throws Exception {
         JDBCRawBackendDataSourceFactory jdbcRawBackendDataSourceFactory = mock(JDBCRawBackendDataSourceFactory.class);
@@ -67,7 +67,7 @@ public final class ProxyDataSourceContextTest {
         build(jdbcRawBackendDataSourceFactory);
         reset(jdbcRawBackendDataSourceFactory);
     }
-
+    
     @Test
     public void assertRightMysqlSchemaDataSources() throws Exception {
         JDBCRawBackendDataSourceFactory jdbcRawBackendDataSourceFactory = mock(JDBCRawBackendDataSourceFactory.class);
@@ -77,7 +77,7 @@ public final class ProxyDataSourceContextTest {
         assertTrue(proxyDataSourceContext.getDataSourcesMap().size() == 1);
         reset(jdbcRawBackendDataSourceFactory);
     }
-
+    
     private ProxyDataSourceContext build(final JDBCRawBackendDataSourceFactory jdbcRawBackendDataSourceFactory) throws Exception {
         JDBCRawBackendDataSourceFactory jdbcBackendDataSourceFactory = (JDBCRawBackendDataSourceFactory) JDBCRawBackendDataSourceFactory.getInstance();
         Class<?> jdbcBackendDataSourceFactoryClass = jdbcBackendDataSourceFactory.getClass();