问题标签 [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 投票
5 回答
11770 浏览

database - What is the benefit of Connection and Statement Pooling?

Can someone explain what is Connection and Statement Pooling and what is the benefit over unpooled DataSources? I am trying to understand when it is a good idea to use a technology like c3p0 or proxool in a project. I need first to understand what they do and when it interesting to use them. Thank you very much.

0 投票
6 回答
91816 浏览

hibernate - 为了避免死锁,休眠所需的 C3P0 设置是什么

我将 Hibernate 与 MySQL 5.1.30 一起使用。

我有下一个库:

  • c3p0-0.0.1.2.jar
  • mysql-connector-java-5.0.3-bin.jar
  • hibernate3.jar

我使用 hibernate.cfg.xml 进行配置:

JAVA persistence with hibernate一书中,对 c3p0 配置选项进行了解释:

  • hibernate.c3p0.min_size这是 C3P0 始终保持就绪的最小 JDBC 连接数
  • hibernate.c3p0.max_size这是池中的最大连接数。如果此数字用尽,则在运行时引发异常。
  • hibernate.c3p0.timeout您指定从池中删除空闲连接的超时时间(在本例中为 300 秒)。
  • hibernate.c3p0.max_statements将被缓存的最大语句数。缓存准备好的语句对于 Hibernate 的最佳性能至关重要。
  • hibernate.c3p0.idle_test_periods这是自动验证连接之前的中间时间(以秒为单位)。

我使用 Java 1.5.0_09 和tomcat 6.0。我在 tomcat 中部署了三个应用程序。他们每个人都使用 hibernate 和一个几乎等同于上面显示的配置文件(只有用户名、数据库名、密码和映射资源发生变化)。

不幸的是,使用上述设置,运行几个小时后,我得到了一些令人讨厌的死锁错误,最终杀死了 tomcat。

这似乎是几个人已经遇到的错误。我将设置更改为尝试遵循此处描述的解决方法http://forum.hibernate.org/viewtopic.php?p=2386237为:

使用新设置,我不会遇到死锁,但我会:

有谁知道我做错了什么,以及如何正确设置 c3p0?

0 投票
16 回答
209741 浏览

java - 使用 JDBC 的连接池选项:DBCP 与 C3P0

可用于 Java/JDBC 的最佳连接池库是什么?

我正在考虑 2 个主要候选人(免费/开源):

我在博客和其他论坛上阅读了很多关于它们的信息,但无法做出决定。

这两个有什么相关的替代品吗?

0 投票
0 回答
496 浏览

mysql - 例如,使用 MySQL 获取 JDBC 连接是否比使用 Derby 慢?

我用

  • 雄猫
  • C3p0(在 Tomcat 中配置的 JNDI)
  • MySQL (InnoDB) / Derby (not embedded) 作为数据库
  • EHCache(内存中)
  • 休眠
  • 测试机运行 WinXP

我使用 Derby 进行开发并想切换到 MySQL。我惊讶地发现,使用 MySQL 我的测试比使用 Derby 慢了大约 50%。

我的测试场景:

  • 大约 2000 个选择,复杂程度各不相同,但没有一个使用超过一个连接。所有 SQL 都使用索引
  • Ehcache 充满了设置运行。之后,我至少运行了 50 倍的 Testscenario 以克服优化器/GC 效应

我确认缓存正在使用中。没有真正的 SQL 进入数据库。所以我只是猜测是连接创建时间减慢了 MySQL 测试的速度。

0 投票
1 回答
1230 浏览

java - C3p0 中的锁排序

我正在尝试使用 c3p0's 在我们的应用程序中记录数据库连接的创建和销毁ConnectionCustomizer。在其中,我有一些看起来像这样的代码:

我遇到了僵局。我发现 c3p0 在其库中至少有几个使用同步方法的对象,并且似乎没有指定它们预期的锁定顺序。当我记录连接时,我会锁定C3P0Registry并最终PoolBackedDataSource(只需创建数据源列表即可访问导致锁定的哈希码)。

关闭连接提供程序(调用C3P0ConnectionProvider.close())会导致以相反的顺序调用锁。但是,当子数据源被关闭时,我的日志记录被触发了。结果是死锁。

似乎我对 c3p0 库进行的两个调用都是有效的预期调用:

  • C3P0ConnectionProvider.close()
  • C3P0Registry.getPooledDataSources()

似乎(除非在文档中明确说明)管理它自己的锁定策略应该是库的责任。(我说这不是为了责怪任何人.. 只是为了确认我对最佳实践的理解)

我应该如何处理这个问题?由于 c3p0 使用同步方法而不是更现代的机制,因此我无法真正测试锁。

从我的DataSource关闭代码中,我可以C3P0Registry在关闭DataSource. 我会猜测正确的锁定顺序,我不知道我是否觉得舒服。

我不认为我可以反转日志调用的锁定顺序。我需要C3P0Registry来获取 的列表DataSources,所以如果DataSources没有先锁定C3P0Registry来获取对它们的引用,我就无法锁定 。

当然,另一种解决方案是在 c3p0 之上提供另一个更高级别的锁。在连接池的情况下,这似乎违背了这一点。

现在,我正在回滚我的日志记录。谢谢你的帮助。

0 投票
5 回答
23708 浏览

mysql - Hibernate、C3P0、Mysql——断管

MySQL 的连接似乎有 8 小时的超时时间。我正在使用 Hibernate for ORM 在 Tomcat 中运行多个 WAR。8 小时后(即一夜之间),当它获得空闲连接时,我的管道损坏了。

我已经跟踪了代码,并加倍确定我提交或回滚了所有事务。

这是我的 hibernate.cfg.xml

我认为可以修复它的参数是c3p0.idle_test_period-- 它默认为 0。但是,在运行 8 小时后,我们仍然遇到 Broken Pipe 问题。虽然谷歌有多个帖子索引,但没有一个得到令人满意的答案。

0 投票
1 回答
1814 浏览

mysql - Windows 中 JDBC-MySQL 的命名管道与 TCP

我的 Java (JPA+Hibernate+CommonsDBCP) 应用程序连接到 MySQL 之间一直存在许多连接问题。我已经完成了研究,使用验证查询、超时、X 之前的测试等调整了所有设置。

这条路径让我想到了另一个比较 DBCP 和 C3PO 的 StackOverflow 问题。从回复中,我决定肯定尝试 C3PO。

然而,一路走来,我发现了另一个选择:命名管道,因为应用服务器和 MySQL 都在同一台机器上运行。麻烦的是,我找不到有关此方法的许多详细信息。

所以这是我的问题:最稳定的选项是什么:命名管道或 TCP w/C3PO?任何故事或知识以及答案都将受到欢迎。

0 投票
2 回答
4081 浏览

java - 如何配置休眠以使用特定于上下文的连接信息?

我正在使用 Hibernate 编写 Java SE(注意,不是Java EE)应用程序,并且我需要为每个执行线程提供到 Hibernate 的不同连接。这些连接必须汇集在一起​​,并且每个连接至少具有不同的身份验证,并且可能具有不同的 JDBC URL。连接将被重新使用(可以从池化需求中推断出来)。

我必须覆盖 Hibernate/C3P0/et al 的哪些部分?这可以通过这些工具来完成,还是我需要编写自己的池数据源?

0 投票
2 回答
2556 浏览

java - Maven 没有解决 hibernate-c3p0 对 slf4j 的依赖

当我包含hibernate-c3p0在我的 Mavenpom.xml文件中时,我得到一个运行时NoClassDefFoundError,因为它找不到org.slf4j.impl.StaticLoggerBinder. 我的印象是 Maven 会解决这种依赖关系——所以如果 c3p0 需要 slf4j,那么 slf4j 将被下载并包含在内。

我的pom.xml文件有:

0 投票
1 回答
2970 浏览

jdbc - jdbcTemplate 在长时间更新时挂起

我最近切换到 Spring Framework 而不是手动处理 JDBC,这主要是一个很好的过渡。但是,一个程序开始遇到奇怪的问题:如果数据库很慢,则调用getJdbcTemplate().update( ... )它时有时永远不会返回。

经过一番研究,我从 Apache DBCP 切换到C3PO,但问题仍然存在。

这是我正在使用的代码:

这是它在日志文件中的样子:

这是代码挂起的地方。通常它只是这样进行:

我不知道为什么我没有从 Spring Framework 本身收到任何日志消息。我在我的主代码中添加了这些行:

测试消息显示,但没有其他内容。很抱歉分道扬镳。

在挂起之前我确实注意到减速。上次成功运行查询需要一分半钟才能完成,而不是通常的 200 毫秒。下一次,我让它运行 25 分钟,然后终止进程。

我知道我正在处理的数据库(InnoDB)有一些问题,但这似乎是在超时之后,Spring Framework 只是“放弃”并挂起。

任何意见,将不胜感激。