问题标签 [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.
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.
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?
java - 使用 JDBC 的连接池选项:DBCP 与 C3P0
可用于 Java/JDBC 的最佳连接池库是什么?
我正在考虑 2 个主要候选人(免费/开源):
- Apache DBCP - http://commons.apache.org/dbcp/
- C3P0 - http://sourceforge.net/projects/c3p0
我在博客和其他论坛上阅读了很多关于它们的信息,但无法做出决定。
这两个有什么相关的替代品吗?
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 测试的速度。
java - C3p0 中的锁排序
我正在尝试使用 c3p0's 在我们的应用程序中记录数据库连接的创建和销毁ConnectionCustomizer
。在其中,我有一些看起来像这样的代码:
我遇到了僵局。我发现 c3p0 在其库中至少有几个使用同步方法的对象,并且似乎没有指定它们预期的锁定顺序。当我记录连接时,我会锁定C3P0Registry
并最终PoolBackedDataSource
(只需创建数据源列表即可访问导致锁定的哈希码)。
关闭连接提供程序(调用C3P0ConnectionProvider.close()
)会导致以相反的顺序调用锁。但是,当子数据源被关闭时,我的日志记录被触发了。结果是死锁。
似乎我对 c3p0 库进行的两个调用都是有效的预期调用:
C3P0ConnectionProvider.close()
C3P0Registry.getPooledDataSources()
似乎(除非在文档中明确说明)管理它自己的锁定策略应该是库的责任。(我说这不是为了责怪任何人.. 只是为了确认我对最佳实践的理解)
我应该如何处理这个问题?由于 c3p0 使用同步方法而不是更现代的机制,因此我无法真正测试锁。
从我的DataSource
关闭代码中,我可以C3P0Registry
在关闭DataSource
. 我会猜测正确的锁定顺序,我不知道我是否觉得舒服。
我不认为我可以反转日志调用的锁定顺序。我需要C3P0Registry
来获取 的列表DataSources
,所以如果DataSources
没有先锁定C3P0Registry
来获取对它们的引用,我就无法锁定 。
当然,另一种解决方案是在 c3p0 之上提供另一个更高级别的锁。在连接池的情况下,这似乎违背了这一点。
现在,我正在回滚我的日志记录。谢谢你的帮助。
mysql - Hibernate、C3P0、Mysql——断管
MySQL 的连接似乎有 8 小时的超时时间。我正在使用 Hibernate for ORM 在 Tomcat 中运行多个 WAR。8 小时后(即一夜之间),当它获得空闲连接时,我的管道损坏了。
我已经跟踪了代码,并加倍确定我提交或回滚了所有事务。
这是我的 hibernate.cfg.xml
我认为可以修复它的参数是c3p0.idle_test_period
-- 它默认为 0。但是,在运行 8 小时后,我们仍然遇到 Broken Pipe 问题。虽然谷歌有多个帖子索引,但没有一个得到令人满意的答案。
mysql - Windows 中 JDBC-MySQL 的命名管道与 TCP
我的 Java (JPA+Hibernate+CommonsDBCP) 应用程序连接到 MySQL 之间一直存在许多连接问题。我已经完成了研究,使用验证查询、超时、X 之前的测试等调整了所有设置。
这条路径让我想到了另一个比较 DBCP 和 C3PO 的 StackOverflow 问题。从回复中,我决定肯定尝试 C3PO。
然而,一路走来,我发现了另一个选择:命名管道,因为应用服务器和 MySQL 都在同一台机器上运行。麻烦的是,我找不到有关此方法的许多详细信息。
所以这是我的问题:最稳定的选项是什么:命名管道或 TCP w/C3PO?任何故事或知识以及答案都将受到欢迎。
java - 如何配置休眠以使用特定于上下文的连接信息?
我正在使用 Hibernate 编写 Java SE(注意,不是Java EE)应用程序,并且我需要为每个执行线程提供到 Hibernate 的不同连接。这些连接必须汇集在一起,并且每个连接至少具有不同的身份验证,并且可能具有不同的 JDBC URL。连接将被重新使用(可以从池化需求中推断出来)。
我必须覆盖 Hibernate/C3P0/et al 的哪些部分?这可以通过这些工具来完成,还是我需要编写自己的池数据源?
java - Maven 没有解决 hibernate-c3p0 对 slf4j 的依赖
当我包含hibernate-c3p0
在我的 Mavenpom.xml
文件中时,我得到一个运行时NoClassDefFoundError
,因为它找不到org.slf4j.impl.StaticLoggerBinder
. 我的印象是 Maven 会解决这种依赖关系——所以如果 c3p0 需要 slf4j,那么 slf4j 将被下载并包含在内。
我的pom.xml
文件有:
jdbc - jdbcTemplate 在长时间更新时挂起
我最近切换到 Spring Framework 而不是手动处理 JDBC,这主要是一个很好的过渡。但是,一个程序开始遇到奇怪的问题:如果数据库很慢,则调用getJdbcTemplate().update( ... )
它时有时永远不会返回。
经过一番研究,我从 Apache DBCP 切换到C3PO,但问题仍然存在。
这是我正在使用的代码:
这是它在日志文件中的样子:
这是代码挂起的地方。通常它只是这样进行:
我不知道为什么我没有从 Spring Framework 本身收到任何日志消息。我在我的主代码中添加了这些行:
测试消息显示,但没有其他内容。很抱歉分道扬镳。
在挂起之前我确实注意到减速。上次成功运行查询需要一分半钟才能完成,而不是通常的 200 毫秒。下一次,我让它运行 25 分钟,然后终止进程。
我知道我正在处理的数据库(InnoDB)有一些问题,但这似乎是在超时之后,Spring Framework 只是“放弃”并挂起。
任何意见,将不胜感激。