当前位置: 首页 > 知识库问答 >
问题:

Tomcat JDBC连接池:TestonBrown与testWhileIdle

刘运浩
2023-03-14

Tomcat JDBC连接池提供了几个测试连接的选项。我觉得更有趣的两个是TestonBrownTestWhileIdle

首先,我认为TestonBrowd是最好的选择,因为它基本上是在将连接提供给应用程序之前验证连接(最大频率由ValidationInterval定义)。

但是过了一会儿,我意识到在使用连接之前测试它可能会影响应用程序的响应性。因此,我认为使用TestWhileIdle可以更有效,因为它在不使用连接时测试连接。

另一方面,我很惊讶validationinterval不适用于TestonReturn,而且我并不真正理解TestonConnect的用途。

共有1个答案

沈自珍
2023-03-14

对此没有百分之百正确的答案。这是一个权衡和背景的问题。

>

  • 大多数情况下,TestonBrown风险最小,因为它确保(尽最大努力)在连接从池返回供您使用之前,已经进行了基本的健全性检查,以确保客户机和db-server处于通话状态。
  • 它仍然不能阻止服务器连接的竞争条件在进行“健全性检查”和应用程序使用连接之间关闭。
  • 但是如果把这看作是一个困难的情况,TestonBrown提供了相当好的保证。

    现在,这样做的权衡是,每次请求连接时,都会对数据库服务器进行查询(无论多么轻量级)。这可能很快,但成本仍然不是零。

    现在想象一下,如果您有testOnIdle选项。这要求您的连接处于空闲状态(取决于连接的空闲超时时间),然后才能进行健全性检查。

    • 现实世界中应用程序到数据库的连接不仅仅是基于空闲超时的中断,它们还可以根据防火墙规则、N/W拥塞、DB-服务器正在进行维护/修补等而被删除
    • 所以它回到数据--当您没有任何类型的“连接验证”时,测量在数据中观察到多少连接错误。

    最后一个数据点是,对于某些应用程序,关键路径不是“验证查询”时间(希望是在较低的毫米波)。这些应用程序有更大的问题要处理。当然,对于某些应用程序,时间是非常重要的。

  •  类似资料:
    • 在我的程序中,我正在访问wep api。最多可以有7个不同的线程访问web api的不同服务器。每个线程负责一个服务器,每个服务器速率限制每个线程。每个线程更新相同的mysql数据库。线程数保持不变。 在我的示例中,是否需要连接池?我不应该只打开7个不同的连接,这些连接将在程序的生命周期中打开吗?

    • 我有(假设)以下服务器为我的应用程序;我的工作与MySQL。 1) 应用程序使用的数据库(服务器位于日本) 2)数据库备份(服务器位于秘鲁) 3)紧急数据库(服务器位于美国) 关于Spring的功能,我有几个问题: A) 如何在所有数据源中同时持久化? 如何在Spring中创建连接池,以便如果我的第一个数据源没有响应,系统会自动与第二个数据源一起工作? 这是我实际的 问候

    • 我对连接池有一些疑问。在SQL Server连接池文章中提到的内容类似于“打开新连接时,如果连接字符串与现有池不完全匹配,则会创建一个新池。每个进程、每个应用程序域、每个连接字符串以及使用集成安全性时、每个Windows标识将连接池化。” 现在我有了自己的windows窗体应用程序,它具有SQL连接。 > 所以当我打开应用程序时,SQL连接首次打开,并创建了一个池。所以,如果我关闭应用程序池会被自

    • 作为一个专业的服务端开发工程师,我们必须要对连接池、线程池、内存池等有较深理解,并且有自己熟悉的库函数可以让我们轻松驾驭这些不同的 池子。既然他们都叫某某池,那么他们从基础概念上讲,原理和目的几乎是一样的,那就是 复用。 以连接池做引子,我们说说服务端工程师基础必修课。 从我们应用最多的 HTTP 连接、数据库连接、消息推送、日志存储等,所有点到点之间,都需要花样繁多的各色连接。为了传输数据,我们

    • 连接池是客户端内的一个对象,主要是维持现有节点的连接。理论上来讲,节点只有死节点与活节点。 然而在现实世界中,事情绝不会这么明确。有时候节点是处在 “可能挂了但还未确认” 、 “连接超时但未知原因” 或 “最近挂过但现在可用” 的灰色地带中。而连接池的工作就是管理这些无规则的连接,并为客户端提供最稳定的连接状态。 如果一个连接池找不到一个活节点来发送查询,那么就会返回一个 NoNodesAvail

    • Swoole 在 v4 版本后内置了 Library 模块,使用 PHP 代码编写内核功能,使得底层设施更加稳定可靠,并且提供了内置协程连接池,本章节会说明如何使用对应的连接池。 也可以观看Swoole微课程视频教程学习内置连接池的使用。 ConnectionPool ConnectionPool,原始连接池,基于Channel自动调度,支持传入任意构造器(callable),构造器需返回一个连接