问题标签 [c3p0]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
30551 浏览

database - Hibernate c3p0 连接池不会超时空闲连接

我们有一个使用 Hibernate 作为持久层连接到 MySQL 5 数据库的 java 服务器,该持久层使用 c3p0 进行数据库连接池。

我试过遵循 c3p0 和 hibernate 文档:

我们在生产服务器上收到错误消息,指出:

...引起:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:连接关闭后不允许任何操作。由于潜在的异常/错误,连接被隐式关闭:

开始嵌套异常

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

MESSAGE:从服务器成功接收的最后一个数据包是 45000 秒前。最后一个成功发送到服务器的数据包是 45000 秒前,比服务器配置的“wait_timeout”值长。您应该考虑在应用程序中使用之前使连接有效性过期和/或测试,增加客户端超时的服务器配置值,或使用连接器/J 连接属性“autoReconnect=true”来避免此问题。

堆栈跟踪:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是45000秒前。最后一个成功发送到服务器的数据包是45000秒前,比服务器配置的'wait_timeout'值长。您应该考虑在应用程序中使用之前使连接有效性过期和/或测试,增加客户端超时的服务器配置值,或使用连接器/J 连接属性“autoReconnect=true”来避免此问题。

我们的 c3p0 连接池属性设置如下:

MySQL的默认wait_timetout设置为28800秒(8小时),报错是说已经超过45000秒(约12.5小时)。尽管 c3p0 配置声明它将“超时”5000 秒后未使用的空闲连接,并且它会每 300 秒检查一次,因此空闲连接的生存时间永远不会超过 5299 秒,对吧?

我已经通过设置我的开发人员 MySQL(Windows 上的 my.ini,Unix 上的 my.cnf)wait_timeout=60 并将 c3p0 空闲超时值降低到 60 秒以下进行了本地测试,它会正确超时空闲连接并创建新连接。我还检查以确保我们没有泄漏数据库连接并保持连接,而且看起来我们不是。

这是我用来在开发人员环境中测试的 c3p0.properties 文件,以确保 c3p0 正确处理连接。

hibernate.properties(使用 MySQL wait_timeout=60 进行测试)

c3p0.properties

0 投票
2 回答
2197 浏览

java - 如何确定连接池所需的连接数?

我在我的应用程序中使用休眠 3.2.2。对于连接池,我们使用的是 c3p0 0.9.1。我正在使用 Generic DAO Pattern 和 Open Session in View 模式来进行数据库操作。
我们正在开发现有网站的新网站。目前,现有应用程序的访问量为 50 万页。我对 c3p0 配置感到困惑。在什么基准上,我决定要打开的连接数。最大连接,最小连接,空闲时间,超时等......

0 投票
4 回答
78342 浏览

java - 使用 C3P0 的 JDBC 连接池

以下是我获取数据库连接的助手类:

我已经使用了这里描述的 C3P0 连接池。

在 DAO 我会写这样的东西:

现在,我的问题是除了关闭 finally 块中列出的游标(连接/语句/resultSet/preparedStatement)之外,我是否应该费心做任何其他清理工作。

这是什么清理??我应该在何时何地进行此操作?

如果您发现上述代码有任何错误,请指出。

0 投票
2 回答
5890 浏览

java - 如何为 c3p0/hibernate 配置查询超时阈值

我有一个使用 Hibernate 3、c3p0 和 spring 2.5.6 的应用程序。我们有一个配置为与 postgres 数据库对话的数据源。在应用服务器和数据库之间引入防火墙之前,一切都运行良好。我们在尝试与数据库通信时间歇性地收到 java.net.SocketTimeoutException: Read Timed Out 错误。

我们认为防火墙的开销导致数据库响应延迟。我们希望通过增加查询在被视为超时之前应该等待多长时间的阈值来验证这一点(如果这甚至可能的话)。这是一个堆栈跟踪片段

0 投票
3 回答
15465 浏览

mysql - 使用 Spring、hibernate 和 C3P0 的设置重现 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

我从生产代码中得到了这个错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功接收的最后一个数据包是36940秒前。最后一个成功发送到服务器的数据包是36940秒前,比服务器配置的'wait_timeout'值长。您应该考虑在应用程序中使用之前使连接有效性过期和/或测试,增加客户端超时的服务器配置值,或使用 Connector/J 连接属性“autoReconnect=true”来避免此问题。

现在我正在尝试在本地重现问题并修复它。我将弹簧上下文设置如下:

然后我将我的mysql wait_timeout设置为10秒,然后运行我的测试,基本上是打开一个连接,做一个查询,关闭它,所以它返回到池中,然后让线程休眠15秒,然后再次打开一个连接,然后再次查询,所以它会中断。但是,我只收到了类似的错误:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

发送到服务器的最后一个数据包是 16 毫秒前。

所以我想知道这两个错误是相同的,还是不同的?我做了一些研究,似乎这两个错误都归结为同一个解决方案:使用属性“testConnectionOnCheckout = true”。但是,根据 c3p0 文档,这是一项非常昂贵的检查。它建议使用“idleConnectionTestPeriod”,但我已经将其设置为 120 秒。我应该使用什么值才能正确验证空闲连接?

所以我基本上要问两件事:

  1. 如何重现我在生产代码中遇到的错误?
  2. 我如何解决它?

谢谢!

0 投票
2 回答
2610 浏览

log4j - Logback - C3P0 和 HSQLDB

我正在尝试让 LogBack 将 HSQLDB 与 C3P0 一起使用。鉴于我当前的环境,我目前坚持使用此配置。我对 Log4J 代码进行了大量投资,并且还需要使用 SLF4J Log4J 适配器。当我尝试一个简单的日志记录程序时,它卡在了记录器配置阶段。这是我的logback.xml

我的类路径是:

这是我的代码片段:

“开始”出现在控制台输出中,但没有别的。

任何帮助,将不胜感激!

0 投票
1 回答
984 浏览

hibernate - 当数据库关闭时,Hibernate 需要 10 分钟才能引发异常

我正在运行 Spring + hibernate 3 + c3p0。启动时,如果数据库关闭,大约 10 分钟后会抛出异常。在那之前程序被阻塞...我不包括 spring xml、hibernate 配置等,因为这是一个相当普遍的问题,如果存在解决方案,它必须是标准的直接方式。如果没有,我可以修剪关键代码和配置并将其粘贴到此处。有人知道吗?提前致谢。


澄清:

我本质上需要的是知道在 DriverManager.setLoginTimeout() 函数周围是否有 c3p0 或 hibernate 甚至 spring 中的包装器。或为我提供此功能的功能。包装器可以通过设置或其他方式。如果我没有在 X 秒内连接到数据源,我只想得到一个异常,不管是什么原因(套接字、数据库、恶劣天气)。我想找个地方来设置这个 X。更糟糕的是,我正在使用的驱动程序 Oracle 驱动程序没有实现 setLoginTimeout() 所以我不能直接使用它。我开始意识到没有办法解决它,只能手动生成我自己的计时器线程。任何人都可以验证上述情况?非常感谢。

0 投票
4 回答
4736 浏览

java - 休眠 c3p0 断管

我正在将休眠 3 与 c3p0 一起用于一个程序,该程序不断地从某个源中提取数据并将其写入数据库。现在的问题是,数据库可能由于某些原因变得不可用(在最简单的情况下:我只是将其关闭)。

如果任何内容即将写入数据库,则不应出现任何异常 - 查询应一直等待,直到数据库再次可用。如果我没记错的话,这是连接池可以为我做的事情之一:如果数据库有问题,只需重试连接——在最坏的情况下是无穷大。

但相反,我得到了一个损坏的管道异常,有时随后是连接被拒绝,然后异常被传递给我自己的代码,这不应该发生。

即使我捕捉到异常,我怎么能再次干净地重新初始化休眠?(到目前为止,在没有 c3p0 的情况下,我只是再次构建了会话工厂,但如果这会泄漏连接(或者这样做可以吗?),我不会感到惊讶。

该数据库是 Virtuoso 开源版本。

我的 hibernate.xml.cfg c3p0 配置:

顺便说一句:创建了测试表,我得到了大量的调试输出 - 所以它似乎实际上读取了配置。

0 投票
2 回答
1722 浏览

sql-server-2005 - SQL Server 2005 - 无法回滚嵌套事务

有时我在执行存储过程时从 SQL Server 2005 中得到以下信息:

有任何想法吗?

当连接池机制试图关闭准备好的语句时:

存储过程包含一个嵌套事务 T1,我认为这是不必要的。这可能是问题吗?

谢谢

0 投票
1 回答
925 浏览

java - 使用 C3P0 的多个 Hibernate 实例

我面临一个奇怪的问题,它似乎与 c3p0 相关。我正在同一个 java vm 中启动一个应用程序的两个实例,它们相互交互。一些操作后,“APPARENT DEADLOCK”消息出现在日志中。

我感觉两个应用程序实例都使用相同的连接池,尽管它们使用不同的会话工厂实例。

C3P0 中可能涉及一些“单例魔法”吗?