Spring Batch 数据库连接不可用,请求超时

2024-04-03

在使用 Spring Batch 进行项目的过程中,我遇到了以下问题。该项目包括:

  • MySQL 数据库 (mysqld 10.2.13-MariaDB)
  • Spring Boot(2.1.1.RELEASE)
  • 春季批次(4.1.0.RELEASE)
  • Spring Batch 配置为使用与 JobRepository 的业务逻辑相同的数据源

数据源的 hikari 连接池大小配置为 4(这是将应用程序推送到我们的 CloudFoundry 实例并在 Spring 自动重新配置期间注入时的默认值) 作为参考,您可以查看示例项目,我在其中创建了一个最小项目来重现问题:https://github.com/FlorianSW/spring-batch-connection-issue https://github.com/FlorianSW/spring-batch-connection-issue

问题: 假设您有一个控制器,它处理一个 RequestMapping,其中至少发生两件事:控制器对业务模型数据库模式执行任意操作(例如,从数据库保存或请求实体),然后通过以下方式启动 Spring Batch 作业:对 JobLauncher#run 的调用。 Spring Batch 配置为使用池大小为 1 的 ThreadPoolTask​​Executor 异步运行任务。

如果请求映射每秒只查询几次(大约 1-3 次),那么这种方法效果很好。然而,如果映射被查询的次数超过这个数量,假设以同步方式(如果在本地测试)超过 4 次(在测试期间我使用了 4 个请求,最多 20 个请求),那么请求就会陷入死锁,其中一些请求会发生死锁。将被中止,但出现以下异常:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataAccessResourceFailureException: Could not obtain last_insert_id(); nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 5001ms.]

当将连接池的大小增加到至少 7 时,这个问题可以得到缓解(我不知道这个数字来自哪里)。重新启动应用程序并执行我的测试 JavaScript 代码 [1] 来分派多个请求后,我可以轻松地将获取请求的数量增加到 150 个,并且应用程序将毫无问题地处理这些请求(如预期)。在增加池大小之前,大量请求会遇到超时。

我不确定这是否属于错误或改进或其他什么,并且我不确定该组件是否是文档或类似的东西,但是,我对此问题的意图是:

找出 Spring Batch 与 Spring Boot 一起是否需要数据库连接池中的最小可用连接数?如果是这样,是否应该在文档中提及? 或者,如果这是一个错误,因为请求处理期间使用的 JDBC 连接没有在合理的短时间内返回到池中?

[1]

for (i = 0; i <= 150; i++) {fetch('http://localhost:8080/api/jobs/' + i, {method: 'PUT'})}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Batch 数据库连接不可用,请求超时 的相关文章

随机推荐

  • 有人知道如何在Python中打开/关闭大写锁定吗?

    我试图在按住两个 Shift 按钮一秒钟时打开 关闭大写锁定 我尝试过使用 virtkey 模块 但它不起作用 不过 该模块确实适用于其他键 所以我认为我没有错误地使用该模块 有人有办法做到这一点吗 需要明确的是 我想要实际打开 关闭大写锁
  • Twitter-Bootstrap - 将简单元素内联

    有没有办法放2 a 元素显示内联 我试过 div class form inline a jjj a a sss a div and also div class row fluid a class inline jjj a a class
  • 有没有一个插件可以在我的网页中显示 HTML 代码

    我想在我的页面中显示大块 LESS 文件 我希望它看起来尽可能漂亮 以便看到它的用户能够轻松阅读 stackoverflow 让我像这样显示它 例如 header color red div myClass color blue 但是有没有
  • 如何用C#打印存储在本地硬盘上的文件?

    我在 C WinForms 中创建了一个函数 它将文件作为 gif 图像保存在本地目录中 如何访问它并将其发送到我的一台网络打印机进行打印 我现在这里有这段代码 internal void PrintLabels string printe
  • 使用 OCaml Graphics 实际更改文本大小

    我想知道如何在 OCaml 中设置文本大小 我试过Graphics set text size我想这应该可以达成交易 但无论我把set text size 200 or set text size 20并没有改变什么 Graphics se
  • 查找数字数组中两个最近元素之间的距离

    所以我正在自学我购买的这本书中的算法 并且我有一个伪代码用于查找数字数组中两个最近元素之间的距离 MinDistance a 0 n 1 Input Array A of numbers Output Minimum Distance be
  • 在文件下载响应时重新启用表单提交按钮

    这可能是一个非常简单的问题 但实际上我还没有看到很多这方面的搜索结果 我在表单中有一个非常基本的提交按钮 它接受一些用户输入 并在服务器的临时目录中生成一个可下载文件 然后提示用户下载该文件 然后在提交时禁用该文件
  • Rails:生产中不存在可供参考的类名关系

    我在迁移中创建了两个引用 它们是对我的 User 表的引用的别名 class CreateInvitations lt ActiveRecord Migration 5 0 def change create table invitatio
  • ALS模型-如何生成full_u * v^t * v?

    我试图弄清楚 ALS 模型如何在批处理更新期间预测新用户的值 在我的搜索中 我遇到了这个堆栈溢出答案 https stackoverflow com a 34729751 1033422 为了方便读者 我将答案复制如下 您可以使用经过训练的
  • 如何在链轮预处理的 js 文件(不是视图)中获取 escape_javascript 和其他帮助程序?

    我正在使用 Rails 3 1 和链轮的东西 我想使用 ERB 预处理 js 文件 然后使用 javascript include tag 包含该文件 它是从代码生成的 因此我使用 ERB 对其进行预处理 但我无法从 ActionView
  • 合并从 python 多进程调用函数返回的数据帧

    from multiprocessing import Pool with Pool processes 6 as p p starmap update tabl zip r 我正在使用此处概述的方法 https web archive o
  • 使用回调令牌的 PHP EWS

    有没有人有幸使用 EWS 回调令牌而不是用户名 密码对来自 PHP 的 EWS SOAP 请求进行身份验证 我一直在看PHP EWS https github com jamesiarmes php ews当您在谷歌上搜索此项目时会出现该项
  • 带下拉图标 V 形的 Bootstrap 手风琴导航

    我有一个引导导航选项卡导航堆叠列表 需要使用手风琴折叠所有列表 除了最近单击的列表或具有活动子项的列表 我有这个工作 但似乎无法弄清楚如何让 V 形改变方向 除非点击 我以前只是将其设置为折叠 而不是手风琴折叠 所以需要一些 javascr
  • 如何以静默模式提取 WinZip 自解压 exe

    我使用 WinZip Self Extractor 创建了一个 exe 文件 它以 UI 模式提取文件 即双击安装程序时会打开一个新窗口 显示正在解压缩 setupname exe 我需要在静默模式下提取相同的 exe 该模式不应显示解压缩
  • 使用内部脚本设置innerHTML [重复]

    这个问题在这里已经有答案了 如果我在任何页面上的 Firebug 中运行以下行 document documentElement innerHTML 为什么不是alert命令执行 看起来你的
  • Perl:使用 XML::Twig 插入 XML::Twig 节点

    我正在比较两个 XML 文件 如果我发现其中一个文件中缺少节点 我想将其插入到另一个文件中 这是我一直在尝试的方法 my out file fbCI report xml open my fh out gt gt out file or d
  • Intellij“作为 Android 应用程序运行”缺失

    android模拟器运行确实很慢 我发现Genymotion运行得很快 当我尝试与 Intellij 一起使用时 在我遵循此文档中的每一步之后https cloud genymotion com page doc 我陷入了这个项目 在您的应
  • 如何在 Spring Data ES 3.2.0.M1 中使用高级 Rest 客户端

    Spring Data ES 3 2 0 M1 仍然使用旧的TransportClient代替HighLevelRestClient Spring Data ES 3 2 0 M1 支持高级 Rest 客户端 请参阅添加对 Java 高级
  • Android Web 浏览器主页

    我见过一些应用程序和广告网络 例如 startapp 通过代码更改 Android 网络浏览器主页 这怎么可能 我查看了startapp sdk 但我没有找到他们更改主页的部分 我也看过BrowserSettings in com andr
  • Spring Batch 数据库连接不可用,请求超时

    在使用 Spring Batch 进行项目的过程中 我遇到了以下问题 该项目包括 MySQL 数据库 mysqld 10 2 13 MariaDB Spring Boot 2 1 1 RELEASE 春季批次 4 1 0 RELEASE S