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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python系统状态_python实现系统状态监测和故障转移实例方法

代码如下:#coding: utf-8import socketimport selectimport timeimport osimport threadingdef ser():s socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("",43244))while 1:infds,outfds,errfds select.select([s],[],[],5)if infds:sms s.recv(1024)if…

ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能

#include #include #include#include#include #include#include #include #include #include#include #include#include #include #define PERM S_IRUSR|S_IWUSR#define MYPORT 5500 //宏定义,定义通信端口#define BACKLOG 10//宏定义,定义服务程序可以连…

使用JUnit对ADF应用程序进行单元测试

JUnit是Java语言的单元测试软件包,由于ADF构建在J2EE框架之上,因此可以用来测试Oracle ADF应用程序。 单元测试基本上是根据某些定义的测试标准来验证最小的可测试模块的过程。 在这里,我将说明如何在JDeveloper 12.2.1.3中设置和使用JUnit来…

libgo高性能网络服务器,【开源】gnet: 一个轻量级且高性能的 Golang 网络库

![](https://ask.qcloudimg.com/http-save/1303222/sipe2g9n9h.png)# Github 主页[https://github.com/panjf2000/gnet](https://github.com/panjf2000/gnet)欢迎大家围观~~,目前还在持续更新,感兴趣的话可以 star 一下暗中观察哦。# 原文博客[gnet: 一个…

拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析

这是优妈成长记的第63篇原创这是一个webpack配置说明本文是发布在github上webpack-demo的README文件内容。主要对webpack.config.js每一条的注释说明。github项目地址:https://github.com/hourong88/webpack-demo可以点击文章最下方【阅读原文】跳转github链接查看&…

orcad自上而下_开发自上而下的Web服务项目

orcad自上而下这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。 第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开:在大多数情况下,将类转换为端点只需在代码中添加少量注…

安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...

开机启动项是每台电脑都有的东西,就是多和少的问题的,很多人开机的时候喜欢加载很多的启动项,其实这也没什么不好的。现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件&#…

七大罪过与如何避免

在整个本文中,我将在代码片段中使用Java,同时还将使用JUnit和Mockito 。 本文旨在提供示例测试代码,这些示例可以是: 难以阅读 难以维护 在这些示例之后,本文将尝试提供替代方法,这些替代方法可用于增强…

4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)

用指针访问数组元素[1]数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组。定义指向数组元素的指针定义与赋值例:int a[10], *pa; pa&a[0]; 或 paa;等效的形式经过上述定…

asyncexec_如何安全使用SWT的显示器asyncExec

asyncexec大多数用户界面(UI)工具箱都是单线程的, SWT也不例外。 这意味着必须仅从单个线程(即所谓的UI线程)访问UI对象。 另一方面,应在后台线程中执行长时间运行的任务,以使UI保持响应。 这使…

属性面板 脚本_3.1 创建和使用脚本

在unity中,游戏物体的行为是通过组件来驱动的,我们可以通过内建的组件来给我们的游戏物体组合各种能力,尽管如此,要知道我们的需求永远是动态的,很快我们就会发现,内建的组件功能已经无法满足我们的需求&am…

新的JMetro JavaFX 11兼容版本

你好,我们又见面了! 这次是一个新版本,该版本与JavaFX 11兼容。 继续阅读以获取详细信息。 JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支。 master分支具有Java 8兼容的JMetro版本,“ 11”分支具有Java 11兼容的版本。 以…

vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...

问题:在本地使用了proxyTable代理可以正常跨域请求后台数据,打包上传后就无法获得后台的json文件。查看了相关资料可以用nginx进行解决。还可以使用命名环境变量,请求的时候进行判断,话不多说上干货module.exports merge(prodEnv…

tomee_使用Vysper,TomEE和PrimeFaces将XMPP服务器嵌入JSF Web应用程序内部

tomee我有一个需要在完成某些工作时通知用户的应用程序。 它使用JSF和Primefaces,因此可以使用大气 (也称为Push)来实现这种通知。 但是另一个有趣的方法是使用嵌入在Java Web应用程序中的XMPP服务器。 好的,好的,您不…

板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!

对于一些比较复杂的结构,Altium的处理能力有限,通常采用AutoCAD来进行设计,然后在Altium中执行菜单栏中“文件”→“导入”→DWG/DXF命令,选择需要导入的DXF文件即可。如果导入过程中出现了乱码,报错等问题要如何解决呢…

您如何使用硒来计算自动化测试的投资回报率?

跨浏览器测试是一种测试,需要大量的精力和时间。 通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动。 特别是如果手动处理。 使用Selenium进行的自动跨浏览…

流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等

概述对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbench、http_load为例,这些通过模拟请求的压测工具,只能发送特定的…

mongodb+java_Java EE + MongoDb与Apache TomEE和Jongo Starter项目

mongodbjava知道MongoDB和Java EE ,但是您不确切地知道如何将它们集成在一起? 您是否阅读了很多有关该主题的内容,但没有找到适合该目的的解决方案? 这个入门项目适合您: 您将学习如何以一种时尚的方式使用MongoDB和J…

C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历

C语言天才!想法奇异?还是逼格满满?一份国外C语言写的传奇简历作者用代码更新了自己的简历,是不是很接地气,特符合程序员的逼格。这是一份可读可执行的语言源文件,也是作者编码风格的体现。C语言源码&#x…

hash值 更改git_Git切换版本

Git切换版本有三种方式:1.基于哈希值切换》基于哈希值切换(推荐),命令:git reset --hard 哈希值,哈希值从哪来,git reflog查看下就知道了,切换版本后,git reflog会发现有两个HEAD,别…