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();