gpt4 book ai didi

spring - Spring-JPA EntityManager 如何处理 "broken"连接?

转载 作者:行者123 更新时间:2023-12-02 07:42:37 27 4
gpt4 key购买 nike

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

我希望在那种情况下它会在第一次对数据库执行任何操作时抛出异常,对吧?

但是,假设我等了 10 分钟,然后再试一次,数据库恰好又回来了。会恢复吗?我可以这样安排吗?

谢谢

最佳答案

其实Spring和JPA都没有关系。在内部,所有持久性框架都简单地调用 DataSource.getConnection()并期望接收(可能是池化的)JDBC 连接。完成后,他们close() 有效地将连接返回到池中。

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

现在回答您的问题 - 通常 DataSource 实现(如 等)将丢弃已知断开的连接并用新连接替换它。这确实取决于提供者,但您可以放心地假设,一旦数据库再次可用,DataSource 将逐渐摆脱病态连接并用替换它们健康的

还有许多 DataSource 实现者提供了在连接返回到客户端之前定期测试连接的方法。这在 DataSource 包含连接池的池化环境中很重要,当数据库变得不可用时,它无法发现这一点。所以一些 DataSource 测试连接(通过调用 SELECT 1 或类似的)在将它返回给客户端之前,偶尔做同样的事情来摆脱断开的连接,例如由于底层 TCP 连接断开。

长话短说

,你会得到一个异常,一旦数据库恢复,系统将正常工作。顺便说一句,你可以很容易地测试这个!

关于spring - Spring-JPA EntityManager 如何处理 "broken"连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9481644/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com