在 JOOQ 中使用 NOWAIT 和 SKIP LOCKED 子句的解决方法
Posted
技术标签:
【中文标题】在 JOOQ 中使用 NOWAIT 和 SKIP LOCKED 子句的解决方法【英文标题】:Workaround for using NOWAIT and SKIP LOCKED clause in JOOQ 【发布时间】:2021-05-29 09:37:25 【问题描述】:我正在使用 Jooq 进行数据库事务管理。我发现NOWAIT
和SKIP LOCKED
子句仅在更高版本的 mysql 中受支持。在我使用的 MYSQL 版本中不支持它们。那么,在 JooQ 中,是否有解决方法可以解决这个问题?一个线程不等待锁定的实体并继续处理其他实体而不更改innodb_lock_wait_timeout
DB 配置?
【问题讨论】:
【参考方案1】:SKIP LOCKED
很难模拟,但使用 innodb_lock_wait_timeout
会话变量模拟 WAIT n
或 NOWAIT
非常有意义。我们将在 jOOQ 3.15 中为 PostgreSQL 做这件事,所以为什么不为旧版本的 MySQL 做同样的事情:
这将在 jOOQ 3.15 中提供
【讨论】:
谢谢卢卡斯。关于这个功能何时可用于开源版本的任何想法? @Picco:现在实施,这几天将发布 3.15。我没有意识到较新版本的 MySQL 还不支持WAIT n
语法。这意味着在 MySQL 支持 WAIT n
之前,jOOQ 开源版也可以使用仿真。以上是关于在 JOOQ 中使用 NOWAIT 和 SKIP LOCKED 子句的解决方法的主要内容,如果未能解决你的问题,请参考以下文章
Windows中的命名管道,FILE_FLAG_OVERLAPPED和PIPE_NOWAIT之间的区别