在Vert.x中使用SQL - Alexey Soshin
Vert.x是非同步的。在Vert.x中執行資料庫查詢時,您顯然正在傳遞迴調。那麼,它是非同步的?:
conn.updateWithParams("insert into user (email, name, password) values (?, ?, ?)", params, (r) -> { if (r.succeeded()) { System.out.println("Ok!"); } else { if (r.cause() instanceof MySQLException) { MySQLException cause = (MySQLException) r.cause(); if (cause.errorMessage().errorCode() == 1062) { // Duplicate key, ignore } } |
不完全對,看看queryWithParams 方法內部:
public SQLConnection queryWithParams(String sql, JsonArray params, Handler<AsyncResult<ResultSet>> resultHandler) { new JDBCQuery(vertx, helper, options, ctx, sql, params).execute(conn, statementsQueue, resultHandler); return this; } |
JDBCQuery 是一個簡單物件,有趣部分是execute()方法,進入AbstractJDBCAction看看這個方法:
public void execute(Connection conn, TaskQueue statementsQueue, Handler<AsyncResult<T>> resultHandler) { ctx.executeBlocking(future -> handle(conn, future), statementsQueue, resultHandler); } |
注意到呼叫的executeBlocking方法名稱,你可能疑惑ctx來自哪裡,其實來自JDBCClientImpl:
public SQLClient getConnection(Handler<AsyncResult<SQLConnection>> handler) { Context ctx = vertx.getOrCreateContext(); getConnection(ctx, ar -> ctx.runOnContext(v -> handler.handle(ar))); return this; } |
結論是,最後,常規的Vert.x JDBC客戶端沒有任何魔力。它使用了一個簡單的資料來源:預設情況下為C3P0,但如果您願意,也可以使用Hikari。您可能希望將池大小設定得更大,預設為15個連線。
這種實現的主要目標很簡單 - 不阻止事件迴圈(從不阻止事件迴圈)。對大多數用例來說,它實際上非常好。只是不要指望它會用JDBC做一些神奇的事情,就像讓它無阻塞一樣。
相關文章
- Vert.x 使用RedisRedis
- 在hibernate中如何使用動態sqlSQL
- 在SQL Server中,關於with as使用介紹SQLServer
- 【SQL*Plus】在SQL*Plus中謹慎使用Ctrl+S快捷鍵SQL
- Vert.x 示例
- 【SQL】SQL中if條件的使用SQL
- Rest with Vert.x for javaRESTJava
- 使用 Vert.X Future/Promise 編寫非同步程式碼Promise非同步
- 【SQL*Plus】使用BREAK和COMPUTE在SQL*Plus中得到分組統計結果SQL
- SQL中Group By的使用SQL
- SQL中EXISTS的使用SQL
- SQL Server中,WITH AS的使用SQLServer
- SQL中copy命令使用SQL
- CDC在sql server 2017中無法使用的問題SQLServer
- 在SQL Server 2008中物件相關性的使用SQLServer物件
- Vert.X CompositeFuture 用法
- Vert.x MySQLClient體驗MySqlclient
- 使用vert.x angular.js 結合 Axon框架的案例AngularJS框架
- exists子句在Sql中的含義SQL
- 在sql*plus中顯示長字元SQL字元
- 在shell中執行SQL*Plus命令SQL
- 關於在SQL語句中ON和WHERE中條件使用的差異SQL
- 在全文索引中同義詞的使用(SQL SERVER 2005)索引SQLServer
- sql 中的with 語句使用SQL
- sql中limit使用方法SQLMIT
- ABAP SQL 中的 Modify 使用SQL
- SQL中的CASE WHEN使用SQL
- Vert.x Kotlin 協程Kotlin
- Vert.x 傳送郵件
- Vert.x 叢集配置 TCPTCP
- 在Grails使用Sql獲取資料AISQL
- 在PL/SQL中使用日期型別SQL型別
- 在Golang中如何正確地使用database/sql包訪問資料庫GolangDatabaseSQL資料庫
- 繫結變數在靜態sql和動態sql中變數SQL
- 在SQL Developer中Debug一個procedureSQLDeveloper
- 在事務中執行sql語句SQL
- 在nhibernate中執行SQL語句SQL
- sql中的*的使用注意點SQL