diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/config/ShardingPropertiesConstant.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/config/ShardingPropertiesConstant.java
index d5636b92e3c8f..577be9d35d1e0 100644
--- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/config/ShardingPropertiesConstant.java
+++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/config/ShardingPropertiesConstant.java
@@ -70,10 +70,10 @@ public enum ShardingPropertiesConstant {
* 最大工作线程数量.
*
*
- * 默认值: CPU的核数 * 2
+ * 默认值: 100
*
*/
- EXECUTOR_MAX_SIZE("executor.max.size", String.valueOf(Runtime.getRuntime().availableProcessors() * 2), int.class),
+ EXECUTOR_MAX_SIZE("executor.max.size", "100", int.class),
/**
* 工作线程空闲时超时时间.
diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/executor/ExecutorEngine.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/executor/ExecutorEngine.java
index e5ff2d5fba7a2..1f0029cf974cc 100644
--- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/executor/ExecutorEngine.java
+++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/executor/ExecutorEngine.java
@@ -19,6 +19,7 @@
import com.dangdang.ddframe.rdb.sharding.config.ShardingProperties;
import com.dangdang.ddframe.rdb.sharding.config.ShardingPropertiesConstant;
+import com.dangdang.ddframe.rdb.sharding.exception.ShardingJdbcException;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
@@ -32,7 +33,7 @@
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -51,7 +52,7 @@ public ExecutorEngine(final ShardingProperties shardingProperties) {
int executorMaxSize = shardingProperties.getValue(ShardingPropertiesConstant.EXECUTOR_MAX_SIZE);
long executorMaxIdleTimeoutMilliseconds = shardingProperties.getValue(ShardingPropertiesConstant.EXECUTOR_MAX_IDLE_TIMEOUT_MILLISECONDS);
executorService = MoreExecutors.listeningDecorator(MoreExecutors.getExitingExecutorService(
- new ThreadPoolExecutor(executorMinIdleSize, executorMaxSize, executorMaxIdleTimeoutMilliseconds, TimeUnit.MILLISECONDS, new LinkedBlockingQueue())));
+ new ThreadPoolExecutor(executorMinIdleSize, executorMaxSize, executorMaxIdleTimeoutMilliseconds, TimeUnit.MILLISECONDS, new SynchronousQueue())));
}
/**
@@ -84,6 +85,20 @@ public O execute(final Collection inputs, final ExecuteUnit e
return mergeUnit.merge(execute(inputs, executeUnit));
}
+ /**
+ * 安全关闭执行器,并释放线程.
+ */
+ public void shutdown() {
+ executorService.shutdownNow();
+ try {
+ executorService.awaitTermination(5, TimeUnit.SECONDS);
+ } catch (final InterruptedException ignored) {
+ }
+ if (!executorService.isTerminated()) {
+ throw new ShardingJdbcException("ExecutorEngine can not been terminated");
+ }
+ }
+
private ListenableFuture> submitFutures(final Collection inputs, final ExecuteUnit executeUnit) {
Set> result = new HashSet<>(inputs.size());
for (final I each : inputs) {
diff --git a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSource.java b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSource.java
index 920cba2331d59..2abd87758e5be 100644
--- a/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSource.java
+++ b/sharding-jdbc-core/src/main/java/com/dangdang/ddframe/rdb/sharding/jdbc/ShardingDataSource.java
@@ -41,6 +41,8 @@ public class ShardingDataSource extends AbstractDataSourceAdapter {
private final ShardingProperties shardingProperties;
+ private final ExecutorEngine executorEngine;
+
private final ShardingContext shardingContext;
public ShardingDataSource(final ShardingRule shardingRule) {
@@ -51,8 +53,9 @@ public ShardingDataSource(final ShardingRule shardingRule, final Properties prop
Preconditions.checkNotNull(shardingRule);
Preconditions.checkNotNull(props);
shardingProperties = new ShardingProperties(props);
+ executorEngine = new ExecutorEngine(shardingProperties);
try {
- shardingContext = new ShardingContext(shardingRule, new SQLRouteEngine(shardingRule, DatabaseType.valueFrom(getDatabaseProductName(shardingRule))), new ExecutorEngine(shardingProperties));
+ shardingContext = new ShardingContext(shardingRule, new SQLRouteEngine(shardingRule, DatabaseType.valueFrom(getDatabaseProductName(shardingRule))), executorEngine);
} catch (final SQLException ex) {
throw new ShardingJdbcException(ex);
}
@@ -80,4 +83,11 @@ public ShardingConnection getConnection() throws SQLException {
MetricsContext.init(shardingProperties);
return new ShardingConnection(shardingContext);
}
+
+ /**
+ * 关闭数据源,释放相关资源.
+ */
+ public void shutdown() {
+ executorEngine.shutdown();
+ }
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java
index b5f0197351f55..da52c34eaab41 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/db/AbstractShardingDataBasesOnlyDBUnitTest.java
@@ -27,6 +27,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
+import org.junit.AfterClass;
import java.util.Arrays;
import java.util.Collections;
@@ -34,7 +35,9 @@
public abstract class AbstractShardingDataBasesOnlyDBUnitTest extends AbstractDBUnitTest {
- private final String dataSourceName = "dataSource_%s";
+ private static boolean isShutdown;
+
+ private static ShardingDataSource shardingDataSource;
@Override
protected List getSchemaFiles() {
@@ -67,13 +70,24 @@ protected List getDataSetFiles() {
}
protected final ShardingDataSource getShardingDataSource() {
- DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
+ if (null != shardingDataSource && !isShutdown) {
+ return shardingDataSource;
+ }
+ isShutdown = false;
+ DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap("dataSource_%s"));
TableRule orderTableRule = TableRule.builder("t_order").dataSourceRule(dataSourceRule).build();
TableRule orderItemTableRule = TableRule.builder("t_order_item").dataSourceRule(dataSourceRule).build();
ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Arrays.asList(orderTableRule, orderItemTableRule))
.bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
.databaseShardingStrategy(new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()))
.tableShardingStrategy(new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm())).build();
- return new ShardingDataSource(shardingRule);
+ shardingDataSource = new ShardingDataSource(shardingRule);
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ isShutdown = true;
+ shardingDataSource.shutdown();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithDMLTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithDMLTest.java
index 3b51b2e6af432..be0b31404f7e2 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithDMLTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithDMLTest.java
@@ -21,6 +21,7 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.dynamic.DynamicShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.Connection;
@@ -29,9 +30,20 @@
public final class DynamicShardingBothForPStatementWithDMLTest extends AbstractShardingBothForPStatementWithDMLTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test(expected = IllegalStateException.class)
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithSelectTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithSelectTest.java
index 6eefb3b1a58fa..49b730404b199 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithSelectTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/pstatement/DynamicShardingBothForPStatementWithSelectTest.java
@@ -21,15 +21,27 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.dynamic.DynamicShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.SQLException;
public final class DynamicShardingBothForPStatementWithSelectTest extends AbstractShardingBothForPStatementWithSelectTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test(expected = UnsupportedOperationException.class)
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithAggregateTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithAggregateTest.java
index 71f213c743ac0..3d02d53afc650 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithAggregateTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithAggregateTest.java
@@ -21,6 +21,7 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.dynamic.DynamicShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
@@ -28,11 +29,19 @@
public final class DynamicShardingBothForStatementWithAggregateTest extends AbstractShardingBothTest {
- private ShardingDataSource shardingDataSource;
+ private static ShardingDataSource shardingDataSource;
@Before
- public void init() throws SQLException {
- shardingDataSource = getShardingDataSource();
+ public void init() {
+ if (null != shardingDataSource) {
+ return;
+ }
+ shardingDataSource = DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Override
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithDMLTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithDMLTest.java
index 749bd5752cdc8..0c8c0cbfd7e01 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithDMLTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithDMLTest.java
@@ -21,6 +21,7 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.dynamic.DynamicShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.Connection;
@@ -29,9 +30,20 @@
public final class DynamicShardingBothForStatementWithDMLTest extends AbstractShardingBothForStatementWithDMLTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test(expected = IllegalStateException.class)
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithSelectTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithSelectTest.java
index e685bd8522a9e..374de180ce93c 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithSelectTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/dynamic/statement/DynamicShardingBothForStatementWithSelectTest.java
@@ -21,15 +21,27 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.dynamic.DynamicShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.SQLException;
public final class DynamicShardingBothForStatementWithSelectTest extends AbstractShardingBothForStatementWithSelectTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = DynamicShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test(expected = UnsupportedOperationException.class)
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithAggregateTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithAggregateTest.java
index 7286763b90092..b7d6e5af1b384 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithAggregateTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithAggregateTest.java
@@ -20,11 +20,22 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.common.pstatement.AbstractShardingBothForPStatementWithAggregateTest;
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
+import org.junit.AfterClass;
public final class StaticShardingBothForPStatementWithAggregateTest extends AbstractShardingBothForPStatementWithAggregateTest {
+ private static ShardingDataSource shardingDataSource;
@Override
protected ShardingDataSource getShardingDataSource() {
- return StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithDMLTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithDMLTest.java
index 945c37e1e4e39..51afa4c2b05b5 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithDMLTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithDMLTest.java
@@ -21,6 +21,7 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.Connection;
@@ -32,9 +33,20 @@
public final class StaticShardingBothForPStatementWithDMLTest extends AbstractShardingBothForPStatementWithDMLTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithGroupByTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithGroupByTest.java
index 1d3e6053cd3b2..2bea4c49ffb87 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithGroupByTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithGroupByTest.java
@@ -20,11 +20,23 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.common.pstatement.AbstractShardingBothForPStatementWithGroupByTest;
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
+import org.junit.AfterClass;
public final class StaticShardingBothForPStatementWithGroupByTest extends AbstractShardingBothForPStatementWithGroupByTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithSelectTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithSelectTest.java
index f78f2f522f3a9..0fe3671738313 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithSelectTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/pstatement/StaticShardingBothForPStatementWithSelectTest.java
@@ -21,15 +21,27 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.SQLException;
public final class StaticShardingBothForPStatementWithSelectTest extends AbstractShardingBothForPStatementWithSelectTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithAggregateTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithAggregateTest.java
index 66cd067a0dcad..bfc0dec54fa3b 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithAggregateTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithAggregateTest.java
@@ -21,6 +21,7 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
@@ -28,11 +29,19 @@
public final class StaticShardingBothForStatementWithAggregateTest extends AbstractShardingBothTest {
- private ShardingDataSource shardingDataSource;
+ private static ShardingDataSource shardingDataSource;
@Before
- public void init() throws SQLException {
- shardingDataSource = getShardingDataSource();
+ public void init() {
+ if (null != shardingDataSource) {
+ return;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Override
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithDMLTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithDMLTest.java
index 6e1ac091c84ea..9f224fd9e2308 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithDMLTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithDMLTest.java
@@ -21,6 +21,7 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.Connection;
@@ -32,9 +33,20 @@
public final class StaticShardingBothForStatementWithDMLTest extends AbstractShardingBothForStatementWithDMLTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithSelectTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithSelectTest.java
index 3a05b7c275296..7568a61863b6d 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithSelectTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/dbtbl/statically/statement/StaticShardingBothForStatementWithSelectTest.java
@@ -21,15 +21,27 @@
import com.dangdang.ddframe.rdb.integrate.dbtbl.statically.StaticShardingBothHelper;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import org.junit.Test;
import java.sql.SQLException;
public final class StaticShardingBothForStatementWithSelectTest extends AbstractShardingBothForStatementWithSelectTest {
+ private static ShardingDataSource shardingDataSource;
+
@Override
protected ShardingDataSource getShardingDataSource() {
- return StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ if (null != shardingDataSource) {
+ return shardingDataSource;
+ }
+ shardingDataSource = StaticShardingBothHelper.getShardingDataSource(createDataSourceMap("dataSource_%s"));
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ shardingDataSource.shutdown();
}
@Test
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java
index c03206c4b3570..2a22c08657893 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/hint/AbstractShardingDataBasesOnlyHintDBUnitTest.java
@@ -31,6 +31,7 @@
import com.dangdang.ddframe.rdb.sharding.parser.result.router.Condition;
import com.google.common.collect.Lists;
import org.dbunit.DatabaseUnitException;
+import org.junit.AfterClass;
import java.sql.Connection;
import java.sql.SQLException;
@@ -38,9 +39,11 @@
import java.util.Collections;
import java.util.List;
-public abstract class AbstractShardingDataBasesOnlyHintDBUnitTest extends AbstractDBUnitTest {
+abstract class AbstractShardingDataBasesOnlyHintDBUnitTest extends AbstractDBUnitTest {
- private final String dataSourceName = "dataSource_%s";
+ private static boolean isShutdown;
+
+ private static ShardingDataSource shardingDataSource;
@Override
protected List getSchemaFiles() {
@@ -73,14 +76,25 @@ protected List getDataSetFiles() {
}
protected final ShardingDataSource getShardingDataSource() {
- DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
+ if (null != shardingDataSource && !isShutdown) {
+ return shardingDataSource;
+ }
+ isShutdown = false;
+ DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap("dataSource_%s"));
TableRule orderTableRule = TableRule.builder("t_order").dataSourceRule(dataSourceRule).build();
TableRule orderItemTableRule = TableRule.builder("t_order_item").dataSourceRule(dataSourceRule).build();
ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Lists.newArrayList(orderTableRule, orderItemTableRule))
.bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
.databaseShardingStrategy(new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()))
.tableShardingStrategy(new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm())).build();
- return new ShardingDataSource(shardingRule);
+ shardingDataSource = new ShardingDataSource(shardingRule);
+ return shardingDataSource;
+ }
+
+ @AfterClass
+ public static void clear() {
+ isShutdown = true;
+ shardingDataSource.shutdown();
}
protected void assertDataSet(final String expectedDataSetFile, final DynamicShardingValueHelper helper,
@@ -97,7 +111,7 @@ protected void assertDataSet(final String expectedDataSetFile, final DynamicShar
}
}
- protected class DynamicShardingValueHelper implements AutoCloseable {
+ class DynamicShardingValueHelper implements AutoCloseable {
private final HintManager hintManager;
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/masterslave/AbstractShardingMasterSlaveDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/masterslave/AbstractShardingMasterSlaveDBUnitTest.java
index fe36455a63040..f3afd885270d1 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/masterslave/AbstractShardingMasterSlaveDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/masterslave/AbstractShardingMasterSlaveDBUnitTest.java
@@ -30,6 +30,7 @@
import com.dangdang.ddframe.rdb.sharding.jdbc.MasterSlaveDataSource;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
import org.junit.After;
+import org.junit.AfterClass;
import org.junit.Before;
import javax.sql.DataSource;
@@ -41,7 +42,9 @@
public abstract class AbstractShardingMasterSlaveDBUnitTest extends AbstractDBUnitTest {
- private final String dataSourceName = "dataSource_%s";
+ private static boolean isShutdown;
+
+ private static ShardingDataSource shardingDataSource;
@Before
@After
@@ -101,7 +104,11 @@ protected List getDataSetFiles() {
}
protected final ShardingDataSource getShardingDataSource() {
- Map masterSlaveDataSourceMap = createDataSourceMap(dataSourceName);
+ if (null != shardingDataSource && !isShutdown) {
+ return shardingDataSource;
+ }
+ isShutdown = false;
+ Map masterSlaveDataSourceMap = createDataSourceMap("dataSource_%s");
MasterSlaveDataSource masterSlaveDs0 = new MasterSlaveDataSource("ms_0", masterSlaveDataSourceMap.get("dataSource_master_0"),
Collections.singletonList(masterSlaveDataSourceMap.get("dataSource_slave_0")));
MasterSlaveDataSource masterSlaveDs1 = new MasterSlaveDataSource("ms_1", masterSlaveDataSourceMap.get("dataSource_master_1"),
@@ -161,6 +168,14 @@ protected final ShardingDataSource getShardingDataSource() {
.bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
.databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new SingleKeyModuloDatabaseShardingAlgorithm()))
.tableShardingStrategy(new TableShardingStrategy("order_id", new SingleKeyModuloTableShardingAlgorithm())).build();
- return new ShardingDataSource(shardingRule);
+ shardingDataSource = new ShardingDataSource(shardingRule);
+ return shardingDataSource;
+ }
+
+
+ @AfterClass
+ public static void clear() {
+ isShutdown = true;
+ shardingDataSource.shutdown();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java
index 4fd5cf3dc1713..55e3175a038e4 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/nullable/AbstractShardingNullableDBUnitTest.java
@@ -27,14 +27,17 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.NoneTableShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
+import org.junit.AfterClass;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
-public abstract class AbstractShardingNullableDBUnitTest extends AbstractDBUnitTest {
+abstract class AbstractShardingNullableDBUnitTest extends AbstractDBUnitTest {
- private final String dataSourceName = "dataSource_%s";
+ private static boolean isShutdown;
+
+ private static ShardingDataSource shardingDataSource;
@Override
protected List getSchemaFiles() {
@@ -67,13 +70,25 @@ protected List getDataSetFiles() {
}
protected final ShardingDataSource getShardingDataSource() {
- DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
+ if (null != shardingDataSource && !isShutdown) {
+ return shardingDataSource;
+ }
+ isShutdown = false;
+ DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap("dataSource_%s"));
TableRule orderTableRule = TableRule.builder("t_order").dataSourceRule(dataSourceRule).build();
ShardingRule shardingRule = ShardingRule.builder().dataSourceRule(dataSourceRule).tableRules(Collections.singletonList(orderTableRule))
.bindingTableRules(Collections.singletonList(new BindingTableRule(Collections.singletonList(orderTableRule))))
.databaseShardingStrategy(new DatabaseShardingStrategy(Collections.singletonList("user_id"), new MultipleKeysModuloDatabaseShardingAlgorithm()))
.tableShardingStrategy(new TableShardingStrategy(Collections.singletonList("order_id"), new NoneTableShardingAlgorithm())).build();
- return new ShardingDataSource(shardingRule);
+ shardingDataSource = new ShardingDataSource(shardingRule);
+ return shardingDataSource;
+ }
+
+
+ @AfterClass
+ public static void clear() {
+ isShutdown = true;
+ shardingDataSource.shutdown();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java
index 832a1d2a15a99..1b5a3a507bff5 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/integrate/tbl/AbstractShardingTablesOnlyDBUnitTest.java
@@ -27,6 +27,7 @@
import com.dangdang.ddframe.rdb.sharding.api.strategy.database.NoneDatabaseShardingAlgorithm;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.TableShardingStrategy;
import com.dangdang.ddframe.rdb.sharding.jdbc.ShardingDataSource;
+import org.junit.AfterClass;
import java.util.Arrays;
import java.util.Collections;
@@ -34,7 +35,9 @@
public abstract class AbstractShardingTablesOnlyDBUnitTest extends AbstractDBUnitTest {
- private final String dataSourceName = "dataSource_%s";
+ private static boolean isShutdown;
+
+ private static ShardingDataSource shardingDataSource;
@Override
protected List getSchemaFiles() {
@@ -47,7 +50,11 @@ protected List getDataSetFiles() {
}
protected final ShardingDataSource getShardingDataSource() {
- DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap(dataSourceName));
+ if (null != shardingDataSource && !isShutdown) {
+ return shardingDataSource;
+ }
+ isShutdown = false;
+ DataSourceRule dataSourceRule = new DataSourceRule(createDataSourceMap("dataSource_%s"));
TableRule orderTableRule = TableRule.builder("t_order").actualTables(Arrays.asList(
"t_order_0",
"t_order_1",
@@ -76,6 +83,14 @@ protected final ShardingDataSource getShardingDataSource() {
.bindingTableRules(Collections.singletonList(new BindingTableRule(Arrays.asList(orderTableRule, orderItemTableRule))))
.databaseShardingStrategy(new DatabaseShardingStrategy("user_id", new NoneDatabaseShardingAlgorithm()))
.tableShardingStrategy(new TableShardingStrategy("order_id", new SingleKeyModuloTableShardingAlgorithm())).build();
- return new ShardingDataSource(shardingRule);
+ shardingDataSource = new ShardingDataSource(shardingRule);
+ return shardingDataSource;
+ }
+
+
+ @AfterClass
+ public static void clear() {
+ isShutdown = true;
+ shardingDataSource.shutdown();
}
}
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/PreparedStatementExecutorTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/PreparedStatementExecutorTest.java
index a90c8fdbc092c..6f46fe35eab5e 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/PreparedStatementExecutorTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/PreparedStatementExecutorTest.java
@@ -72,8 +72,10 @@ public void tearDown() throws NoSuchFieldException, IllegalAccessException {
ExecutorTestUtil.clear();
DMLExecutionEventBus.clearListener();
DQLExecutionEventBus.clearListener();
+ executorEngine.shutdown();
}
+ @SuppressWarnings("unchecked")
@Test
public void assertNoStatement() throws SQLException {
PreparedStatementExecutor actual = new PreparedStatementExecutor(executorEngine, Collections.EMPTY_LIST);
diff --git a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutorTest.java b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutorTest.java
index 8e3c9518d3716..0890fa710e599 100644
--- a/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutorTest.java
+++ b/sharding-jdbc-core/src/test/java/com/dangdang/ddframe/rdb/sharding/executor/StatementExecutorTest.java
@@ -76,6 +76,7 @@ public void tearDown() throws NoSuchFieldException, IllegalAccessException {
ExecutorTestUtil.clear();
DMLExecutionEventBus.clearListener();
DQLExecutionEventBus.clearListener();
+ executorEngine.shutdown();
}
@Test
diff --git a/sharding-jdbc-doc/content/post/release_notes.md b/sharding-jdbc-doc/content/post/release_notes.md
index dba6554d8647e..5b45de4a659ce 100644
--- a/sharding-jdbc-doc/content/post/release_notes.md
+++ b/sharding-jdbc-doc/content/post/release_notes.md
@@ -1,3 +1,4 @@
+
+++
date = "2016-02-05T17:03:18+08:00"
title = "Release Notes"
@@ -18,6 +19,8 @@ weight = 1
1. [ISSUE #114](https://github.com/dangdangdotcom/sharding-jdbc/issues/114) ShardingPreparedStatement执行批处理任务时,反复解析sql导致oom
1. [ISSUE #33](https://github.com/dangdangdotcom/sharding-jdbc/issues/33) Limit支持问题
1. [ISSUE #124](https://github.com/dangdangdotcom/sharding-jdbc/issues/124) com.dangdang.ddframe.rdb.sharding.jdbc.adapter.AbstractStatementAdapter.getUpdateCount返回值不符合JDBC规范
+1. [ISSUE #141](https://github.com/dangdangdotcom/sharding-jdbc/issues/141) 多线程执行器参数设置失效
+
## 1.3.1