jooq 执行sql

响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递。

事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。

实际上,事情很简单:

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

这里真的发生了什么? 没有什么不寻常的。 有4个执行块:

  1. 插入新作者的
  2. 再次获取同一作者的
  3. 重新插入新获取的AUTHOR的代码(引发异常)
  4. 一种忽略引发的异常并再次删除AUTHOR的方法

最后,当执行链建立时,调用线程将使用CompletableFuture.join()方法加入整个链,该方法与Future.get()方法基本相同,不同之处在于它不会引发任何已检查的异常。

将此与其他API进行比较

诸如Scala的Slick之类的其他API也通过“标准API”实现了类似的功能,例如对flatMap()调用。 我们目前不会模仿这样的API,因为我们相信新的Java 8 API对于本机Java讲者来说将变得更加惯用。 具体来说,在执行SQL时,正确实现连接池和事务至关重要。 异步链接执行块的语义以及它们与事务的关系非常微妙。 如果您希望事务跨越多个这样的块,则必须自己通过jOOQ的Configuration及其包含的ConnectionProvider对其进行编码。

阻止JDBC

显然,此类解决方案始终存在一个障碍,那就是JDBC本身-很难转换为异步API。 实际上,很少有数据库真正支持异步查询执行和游标,因为大多数情况下,单个数据库会话一次只能由单个线程用于单个查询。

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

jooq 执行sql

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

  1. 具有jOOQ和Java 8的CompletableFuture的异步SQL执行

    响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递. 事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java ...

  2. Java笔记(十七) 异步任务执行服务

    异步任务执行服务 一.基本原理和概念 一)基本接口 1)Runnable和Callable:表示要执行的异步任务. 2)Executor和ExecutorService:表示执行服务. 3)Futur ...

  3. Java编程的逻辑 (77) - 异步任务执行服务

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  4. Java 8 (10) CompletableFuture:组合式异步编程

    随着多核处理器的出现,提升应用程序的处理速度最有效的方式就是可以编写出发挥多核能力的软件,我们已经可以通过切分大型的任务,让每个子任务并行运行,使用线程的方式,分支/合并框架(java 7) 和并行流 ...

  5. MySQL(三)——SQL执行计划分析

    目录 一.SQL执行计划概述 二.explain字段详解 1.id 2.select_type 3.possible_keys 4.key 5. key_len 6.ref 7.rows 8.Extr ...

  6. oracle sql 执行计划分析_《真正读懂Oracle SQL执行计划》

    maclean_0071人评论1235人阅读2013-10-25 15:18:12 [视频教学:性能优化]Maclean Liu的Oracle性能优化讲座第一回<真正读懂Oracle SQL执行 ...

  7. 【Android 异步操作】AsyncTask 异步任务 ( AsyncTask 异步任务执行方法 execute 方法相关源码解析 )

    文章目录 一.AsyncTask 异步任务执行方法 execute() 引入 二.AsyncTask 异步任务执行方法 execute() 三.sDefaultExecutor 线程池解析 四.exe ...

  8. sql server express 并发数的限制_阿里数据库性能诊断的利器——SQL执行干预

    概述 在业务数据库性能问题诊断中,如果发现一个业务性能很差跟某个SQL有关,应用连接池几乎被该SQL占满,同时数据库服务器上也不堪重负.此时情况很紧急,业务改SQL重发布已经来不及了,运维能选择的操作 ...

  9. oracle awr 执行计划,AWR(五)-利用AWR生成SQL执行计划(SQLREPORT)并进行优化 | 信春哥,系统稳,闭眼上线不回滚!...

    有些时候,我们需要分析占用资源比较大的sql的执行计划,也需要将sql的执行计划以报告的形式反馈给客户,由于AWR报告里的SQL通常都是些变量,因此以命令行方式生成sql的执行计划就很麻烦,而且也不美 ...

最新文章

  1. SAP freelancer如何找到一个不苦逼的项目?
  2. 如何看懂一个深度学习的项目代码
  3. 怎么打断点_搞笑段子: 有次相亲, 双方父母都在, 我坐下就给自己点了支烟
  4. mybatis的快速入门
  5. 计算机联锁仿真软件设计,一种基于LabVIEW的计算机联锁仿真系统的制作方法
  6. payment on barclays
  7. EMNLP 2020 | 基于超边融合的文本增强知识图谱开放域问答
  8. 清华大学人工智能研究院成立智能信息获取研究中心
  9. uniapp底部弹出框效果
  10. JavaEE的13种核心技术规范
  11. 前端学习(1374):express参数中get参数的获取
  12. 中国程序员最应该感谢的几家公司
  13. Centos系统添加系统用户操作记录审计
  14. 【Django 2021年最新版教程17】数据库操作 models 存在更新 不存在新建update_or_create
  15. oracle中print,oracle中print_table存储过程实例介绍
  16. linux 进程学习
  17. GIMP基本功能和教程!
  18. 七年未必痒:如何营造亲密关系的新鲜感?
  19. AW349 黑暗城堡
  20. 变形金刚2影院版完整字幕

热门文章

  1. jzoj1029-电子眼【树形dp】
  2. POJ2406-Power Strings【KMP】
  3. 【bfs】极其简单的最短路问题
  4. Codeforces Round #497 (Div. 1)
  5. 2018 ACM-ICPC World Finals - Beijing
  6. jar包天天见,可是你知道它的运行机制吗
  7. 在 Java 中初始化 List 的五种方法
  8. @Resource,@Autowired,@Inject3种注入方式详解
  9. Java多线程之守护线程实战
  10. 老师,我们想看到您的笑容!