From 0495928e4909ccbca021f88462faa49e6cb4efa4 Mon Sep 17 00:00:00 2001 From: carm Date: Wed, 22 Jun 2022 20:42:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(async):=20=E5=B0=9D=E8=AF=95=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=20#49=20=E4=B8=AD=E6=8F=90=E5=88=B0=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/pom.xml | 2 +- .../cc/carm/lib/easysql/api/SQLManager.java | 19 +++++++++++ demo/pom.xml | 8 ++--- .../java/cc/carm/lib/easysql/EasySQLTest.java | 5 +-- .../lib/easysql/tests/QueryAsyncTest.java | 33 +++++++++++++++++++ impl/pom.xml | 2 +- .../easysql/action/query/QueryActionImpl.java | 12 ++++--- .../lib/easysql/manager/SQLManagerImpl.java | 6 +++- pom.xml | 2 +- with-pool/beecp/pom.xml | 2 +- with-pool/hikaricp/pom.xml | 2 +- 11 files changed, 74 insertions(+), 19 deletions(-) create mode 100644 demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java diff --git a/api/pom.xml b/api/pom.xml index 3a9a0bf..916b790 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -5,7 +5,7 @@ cc.carm.lib easysql-parent - 0.4.0 + 0.4.1 4.0.0 diff --git a/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java b/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java index 80d7106..fa3a978 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java @@ -17,6 +17,8 @@ import java.sql.SQLException; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ThreadPoolExecutor; import java.util.function.Supplier; /** @@ -30,6 +32,23 @@ public interface SQLManager { boolean isDebugMode(); + + /** + * 获取用于执行 {@link SQLAction#executeAsync()} 的线程池。 + *
默认线程池为 {@link ThreadPoolExecutor} ,大小为 3。 + * + * @return {@link ExecutorService} + */ + @NotNull ExecutorService getExecutorPool(); + + /** + * 设定用于执行 {@link SQLAction#executeAsync()} 的线程池。 + * + * @param executorPool {@link ExecutorService} + */ + void setExecutorPool(@NotNull ExecutorService executorPool); + + /** * 设定是否启用调试模式。 * 启用调试模式后,会在每次执行SQL语句时,调用 {@link #getDebugHandler()} 来输出调试信息。 diff --git a/demo/pom.xml b/demo/pom.xml index d0b8bf9..ad2a8f4 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.0 + 0.4.1 4.0.0 @@ -70,7 +70,6 @@ com.zaxxer HikariCP 4.0.3 - test @@ -78,28 +77,24 @@ com.h2database h2 2.1.214 - test org.apache.logging.log4j log4j-api ${log4j.version} - compile org.apache.logging.log4j log4j-core ${log4j.version} - compile org.apache.logging.log4j log4j-slf4j-impl ${log4j.version} - compile @@ -120,4 +115,5 @@ + \ No newline at end of file diff --git a/demo/src/test/java/cc/carm/lib/easysql/EasySQLTest.java b/demo/src/test/java/cc/carm/lib/easysql/EasySQLTest.java index a8762f1..b5821d0 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/EasySQLTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/EasySQLTest.java @@ -18,7 +18,7 @@ public class EasySQLTest { protected SQLManager sqlManager; @Before - public void initDatabase() { + public void initialize() { HikariConfig config = new HikariConfig(); config.setDriverClassName("org.h2.Driver"); config.setJdbcUrl("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;MODE=MYSQL;"); @@ -28,7 +28,7 @@ public class EasySQLTest { } @After - public void shutdownDatabase() { + public void shutdown() { if (sqlManager.getDataSource() instanceof HikariDataSource) { //Close bee connection pool ((HikariDataSource) sqlManager.getDataSource()).close(); @@ -50,6 +50,7 @@ public class EasySQLTest { tests.add(new SQLUpdateReturnKeysTest()); tests.add(new QueryCloseTest()); tests.add(new QueryFunctionTest()); + tests.add(new QueryAsyncTest()); // tests.add(new DeleteTest()); print("准备进行测试..."); diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java new file mode 100644 index 0000000..265eea1 --- /dev/null +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java @@ -0,0 +1,33 @@ +package cc.carm.lib.easysql.tests; + +import cc.carm.lib.easysql.TestHandler; +import cc.carm.lib.easysql.api.SQLManager; + +import java.sql.SQLException; + +public class QueryAsyncTest extends TestHandler { + + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + sqlManager.createQuery() + .inTable("test_user_table") + .orderBy("id", false) + .setLimit(1) + .build().executeAsync(query -> { + try { + Thread.sleep(1000L); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + if (!query.getResultSet().next()) { + System.out.println("id (ps): NULL"); + } else { + System.out.println("id (ps): " + query.getResultSet().getInt("id")); + } + }); + + } +} diff --git a/impl/pom.xml b/impl/pom.xml index 80b5742..d0406bf 100644 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.0 + 0.4.1 4.0.0 diff --git a/impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java b/impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java index 8d2eb9c..7cf6fa6 100644 --- a/impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java +++ b/impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java @@ -53,10 +53,12 @@ public class QueryActionImpl extends AbstractSQLAction implements Quer @Override public void executeAsync(SQLHandler success, SQLExceptionHandler failure) { - try (SQLQueryImpl query = execute()) { - if (success != null) success.accept(query); - } catch (SQLException exception) { - handleException(failure, exception); - } + getManager().getExecutorPool().submit(() -> { + try (SQLQueryImpl query = execute()) { + if (success != null) success.accept(query); + } catch (SQLException exception) { + handleException(failure, exception); + } + }); } } diff --git a/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java b/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java index ab414bf..22f9f67 100644 --- a/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java +++ b/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java @@ -89,10 +89,14 @@ public class SQLManagerImpl implements SQLManager { return LOGGER; } - public ExecutorService getExecutorPool() { + public @NotNull ExecutorService getExecutorPool() { return executorPool; } + public void setExecutorPool(@NotNull ExecutorService executorPool) { + this.executorPool = executorPool; + } + @Override public @NotNull DataSource getDataSource() { return this.dataSource; diff --git a/pom.xml b/pom.xml index 8e7f1fb..d183637 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ cc.carm.lib easysql-parent pom - 0.4.0 + 0.4.1 api diff --git a/with-pool/beecp/pom.xml b/with-pool/beecp/pom.xml index e60f559..62192f3 100644 --- a/with-pool/beecp/pom.xml +++ b/with-pool/beecp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.0 + 0.4.1 ../../pom.xml 4.0.0 diff --git a/with-pool/hikaricp/pom.xml b/with-pool/hikaricp/pom.xml index f28248e..797cb7d 100644 --- a/with-pool/hikaricp/pom.xml +++ b/with-pool/hikaricp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.0 + 0.4.1 ../../pom.xml 4.0.0