日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行

發(fā)布時(shí)間:2023/12/3 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jooq 執(zhí)行sql

響應(yīng)式編程是一個(gè)新的流行詞,它實(shí)際上僅表示異步編程或消息傳遞。

事實(shí)是,函數(shù)語法極大地幫助構(gòu)建了異步執(zhí)行鏈,今天,我們將看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到這一點(diǎn)。

實(shí)際上,事情很簡(jiǎn)單:

// Initiate an asynchronous call chain CompletableFuture// This lambda will supply an int value// indicating the number of inserted rows.supplyAsync(() -> DSL.using(configuration).insertInto(AUTHOR, AUTHOR.ID, AUTHOR.LAST_NAME).values(3, "Hitchcock").execute())// This will supply an AuthorRecord value// for the newly inserted author.handleAsync((rows, throwable) -> DSL.using(configuration).fetchOne(AUTHOR, AUTHOR.ID.eq(3)))// This should supply an int value indicating// the number of rows, but in fact it'll throw// a constraint violation exception.handleAsync((record, throwable) -> {record.changed(true);return record.insert();})// This will supply an int value indicating// the number of deleted rows.handleAsync((rows, throwable) -> DSL.using(configuration).delete(AUTHOR).where(AUTHOR.ID.eq(3)).execute())// This tells the calling thread to wait for all// chained execution units to be executed.join();

這里真的發(fā)生了什么? 沒有什么不尋常的。 有4個(gè)執(zhí)行塊:

  • 插入新作者的
  • 再次獲取同一作者的
  • 重新插入新獲取的AUTHOR的代碼(引發(fā)異常)
  • 一種忽略引發(fā)的異常并再次刪除AUTHOR的方法
  • 最后,當(dāng)執(zhí)行鏈建立時(shí),調(diào)用線程將使用CompletableFuture.join()方法加入整個(gè)鏈,該方法與Future.get()方法基本相同,不同之處在于它不會(huì)引發(fā)任何已檢查的異常。

    將此與其他API進(jìn)行比較

    諸如Scala的Slick之類的其他API也通過“標(biāo)準(zhǔn)API”實(shí)現(xiàn)了類似的功能,例如對(duì)flatMap()調(diào)用。 我們目前不會(huì)模仿這樣的API,因?yàn)槲覀兿嘈判碌腏ava 8 API對(duì)于本機(jī)Java講者來說將變得更加慣用。 具體來說,在執(zhí)行SQL時(shí),正確實(shí)現(xiàn)連接池和事務(wù)至關(guān)重要。 異步鏈接執(zhí)行塊的語義以及它們與事務(wù)的關(guān)系非常微妙。 如果您希望事務(wù)跨越多個(gè)這樣的塊,則必須自己通過jOOQ的Configuration及其包含的ConnectionProvider對(duì)其進(jìn)行編碼。

    阻止JDBC

    顯然,此類解決方案始終存在一個(gè)障礙,那就是JDBC本身-很難轉(zhuǎn)換為異步API。 實(shí)際上,很少有數(shù)據(jù)庫真正支持異步查詢執(zhí)行和游標(biāo),因?yàn)榇蠖鄶?shù)情況下,單個(gè)數(shù)據(jù)庫會(huì)話一次只能由單個(gè)線程用于單個(gè)查詢。

    翻譯自: https://www.javacodegeeks.com/2014/09/asynchronous-sql-execution-with-jooq-and-java-8s-completablefuture.html

    jooq 執(zhí)行sql

    總結(jié)

    以上是生活随笔為你收集整理的jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。