Spring-JPA EntityManager 如何处理“断开的”连接?

2024-02-13

我有一个使用 Spring-EntityManager (JPA) 的应用程序,我想知道如果数据库在上述应用程序的生命周期内不可用,会发生什么情况。

我预计在这种情况下它会在第一次对数据库执行任何操作时抛出异常,对吗?

但是,假设我等待 10 分钟,然后重试,数据库恰好恢复了。会恢复吗?我可以这样安排吗?

Thanks


实际上,Spring 和 JPA 都与此无关。在内部,所有持久性框架都简单地调用DataSource.getConnection() http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html#getConnection()并期望接收(可能是池化的)JDBC 连接。一旦他们完成了,他们close()连接有效地将其返回到池中。

现在当DataSource被要求提供连接但数据库不可用,它将引发异常。该异常将向上传播,并由您使用的任何框架以某种方式处理。

现在回答你的问题 - 通常DataSource实施(如dbcp /questions/tagged/dbcp, c3p0 /questions/tagged/c3p0等)将丢弃已知已损坏的连接并用新的连接替换它。这实际上取决于提供商,但您可以放心地假设,一旦数据库再次可用,DataSource会逐渐摆脱sick连接并将其替换为healthy ones.

还有很多DataSource实现者提供了在连接返回给客户端之前定期测试连接的方法。这在池化环境中很重要,因为DataSource包含一个连接池,当数据库变得不可用时,它无法发现它。所以一些DataSources 测试连接(通过调用SELECT 1或类似的),然后将其返回给客户端,并偶尔执行相同的操作以消除断开的连接,例如由于底层 TCP 连接损坏。

TL;DR

Yes,你会得到一个异常并且yes数据库恢复后系统即可正常工作。顺便说一句,你可以轻松测试这个!

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

Spring-JPA EntityManager 如何处理“断开的”连接? 的相关文章

随机推荐

  • 您可以对遗留代码库做哪些对提高质量影响最大的事情?

    当您在遗留代码库中工作时 随着时间的推移 什么会对提高代码库的质量产生最大的影响 删除未使用的代码 删除重复的代码 添加单元测试以提高覆盖率较低的测试覆盖率 跨文件创建一致的格式 更新第三方软件 减少静态分析工具 即 Findbugs 生成
  • 具有 CSS 和 HTML 的水平家谱 - 反向

    我在网上搜索并找到了一个很好的家谱示例在代码笔这里 http codepen io anon pen bdLeNe 我想要同样的东西 但旋转了180度 我想以 16 名成员开始我的家谱 并从左到右降序 16 8 4 2 1 如何通过使用 编
  • del 语句与调用 __delitem__ 总是 100% 相同吗?

    a something iterable object in python del a 1 Is del a 1 总是一样a delitem 1 是Python吗del语句定义为调用 delitem method The del陈述 htt
  • 向上按钮调用父 Activity 的 OnDestroy

    首先 我想澄清一些事情 我正在努力使用的按钮不是back按钮 我指的是up home应用程序顶部的 ActionBar Toolbar 中的按钮 而不是底部的 Android 按钮 有几个posts https stackoverflow
  • 将特定 TensorFlow 变量恢复到特定层(按名称恢复)

    假设我训练了一个 TensorFlow 模型并保存了它 现在有一个不同的模型 并且我想将保存的模型中的一些权重用于模型中的某些层 它们具有相同的形状 现在 我能够找到如何从模型中保存特定变量 具有特定名称 但我无法找到任何按名称恢复这些变量
  • 如何将挂起函数作为显式参数传递给协程构建器?

    我正在调查launch协程构建器将协程代码作为block suspend CoroutineScope gt Unit 我们通常将代码作为 lambda 传递 但是 我想知道如何将此函数作为显式参数传递给启动函数 coroutineScop
  • 如何使用gson处理动态响应数据? (json 到 java 对象)

    这是 Json 用户列表 response result users name ABC age 20 gender F name cbd age 23 gender M 有时会像这样返回 response result
  • 使用 Tornado 广播消息

    我有一个发送消息的应用程序 该消息应该广播到每个当前连接的客户端 假设客户数量可能达到数千 如何在不阻塞的情况下实现这个广播逻辑 我认为会阻止的示例代码 clients class Broadcaster tornado websocket
  • Arm Cortex A9交叉编译奇怪的浮点行为

    我正在尝试将更大的应用程序从 x86 移植到 arm cortex a9 但在交叉编译应用程序时 我遇到了像 modf 这样的浮点函数的奇怪分段错误 其他 libc 函数似乎处理浮点数错误 但不会崩溃 见下文 所以我尝试了这个小测试程序 它
  • android.content.UriMatcher 的含义

    Uri Matcher 是什么android content UriMatcher 如何使用它 有人可以解释一下以下三行代码的含义吗 uriMatcher new UriMatcher UriMatcher NO MATCH uriMatc
  • C# 中的 Directory.GetFiles() 模式匹配

    我在用着Directory GetFiles 根据给定模式列出文件 这对于我正在寻找的大多数模式 例如 zip rar sfv 都适用 这就是我准备清单的方式 或多或少 问题在于我想列出的数字 0 001 到 0 999 的模式 alArr
  • 如何更改选定文本的颜色?

    请左键单击并拖动此文本 标记它 您看到的颜色是蓝色 我想使用 Javascript 或 HTML CSS 将该颜色更改为深绿色 浏览器支持有限 selection background ffb7b7 Safari moz selection
  • 了解 ldd 输出

    如何ldd知道这取决于libc so 6 not libc so 5 or libc so 7 libc so 6 gt lib64 libc so 6 0x00000034f4000000 lib64 ld linux x86 64 so
  • 无法从 WP8 上 SD 卡上的 SQLite DB 检索数据

    我在控制台应用程序中使用 System Data SQLite 创建了 SQLite DB 然后我将其移至 Windows Phone 的 SD 卡 我按照以下说明将 SQLite 支持添加到我的 WP8 应用程序 https github
  • 你能在 matplotlib 中绘制实时数据吗?

    我正在一个线程中从套接字读取数据 并希望在新数据到达时绘制和更新绘图 我编写了一个小原型来模拟事物 但它不起作用 import pylab import time import threading import random data Th
  • pymc3 具有来自核密度估计的自定义似然函数

    我正在尝试将 pymc3 与从一些观察数据派生的似然函数一起使用 这些观察到的数据不符合任何好的标准分布 所以我想根据这些观察来定义我自己的数据 一种方法是对观测值使用核密度估计 这在 pymc2 中是可能的 但与 pymc3 中的 The
  • 来电时无振铃事件

    我不知道哪里出了问题 听者听不懂onRinging事件 这样我就可以决定接受还是拒绝来电 清单中是这样的
  • JPA 枚举继承

    我有一个名为 类别 的接口和 4 个实现该接口的枚举 这些枚举是按类别决定的 并且有不同的类型 例子 Interface interface BillCategory Enum 1 public enum GroceryPurchase i
  • 嵌入式 ember-cli 项目与 RequireJS 冲突

    我正在尝试将 EmberJS 应用程序嵌入到广泛使用 RequireJS 库的大型门户应用程序中 我正在使用 ember cli 来构建项目 构建的应用程序由两个文件组成 dist assets vendor js and dist ass
  • Spring-JPA EntityManager 如何处理“断开的”连接?

    我有一个使用 Spring EntityManager JPA 的应用程序 我想知道如果数据库在上述应用程序的生命周期内不可用 会发生什么情况 我预计在这种情况下它会在第一次对数据库执行任何操作时抛出异常 对吗 但是 假设我等待 10 分钟