java Hibernate DB 连接池程序 c3p0 有问题
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3842232/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Something wrong with Hibernate DB connection pooler c3p0
提问by Ricardo
since last post, did all the changes suggested but this problem still haunts me. Here's the error i get:
自从上一篇文章以来,做了所有建议的更改,但这个问题仍然困扰着我。这是我得到的错误:
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 44,499,102 milliseconds ago.
here's my hibernate.cfg.xml
这是我的 hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.autoReconnect"> true</property>
<property name="connection.autoReconnectForPools">true</property>
<property name="connection.is-connection-validation-required">true</property>
<property name="hibernate.c3p0.acquire_increment">5</property>
<property name="hibernate.c3p0.max_size">150</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.min_size">10</property>
<property name="hibernate.c3p0.timeout">100</property> <!-- seconds -->
<property name="hibernate.c3p0.idle_test_period">30</property> <!-- seconds -->
<property name="hibernate.connection.url">jdbc:mysql://!secret!autoReconnect=true</property>
<property name="hibernate.connection.username">!secret!</property>
<property name="hibernate.connection.password">!secret!</property>
<!-- <property name="hibernate.connection.pool_size">10</property> -->
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="current_session_context_class">thread</property>
<!-- Mapping files -->
<mapping resource="mappings.hbm.xml"/>
</session-factory>
</hibernate-configuration>
and c3p0.properties
和 c3p0.properties
c3p0.preferredTestQuery=select 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckin=true
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=30
c3p0.breakAfterAcquireFailure=false
c3p0.idleConnectionTestPeriod=100
回答by FoxyBOA
As for me, you're incorrectly configured c3p0.
至于我,你的c3p0配置不正确。
Properties like c3p0.preferredTestQuery must be located at c3p0.properties file from your classpath (e.g. WEB-INF/classes).
像 c3p0.preferredTestQuery 这样的属性必须位于类路径中的 c3p0.properties 文件(例如 WEB-INF/classes)。
Below is my example of c3p0.properties file that work nice for Oracle:
下面是我的 c3p0.properties 文件示例,它适用于 Oracle:
c3p0.preferredTestQuery=SELECT 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=30
c3p0.breakAfterAcquireFailure=false
See also official doc for c3p0 here.
另请参阅此处c3p0 的官方文档。
And please pay your attention to version of c3p0 that you're using. They had an issue connection restoring in early releases of c3p0 0.9.
请注意您使用的 c3p0 版本。他们在 c3p0 0.9 的早期版本中遇到了连接恢复问题。
回答by vstoyanov
It seems that the connection to the database has timed out and has been terminated by the database server. You should either increase the time the server can waitor append ?autoReconnect=true to your jdbc connection string.
与数据库的连接似乎已超时并已被数据库服务器终止。您应该增加服务器可以等待的时间或将 ?autoReconnect=true 附加到您的 jdbc 连接字符串。
回答by Raul Luna
I think this postmight help. If it is the case, increasing the value of wait_timeout
only postpones the ocurrence more time, rather than solving the problem.
我认为这篇文章可能会有所帮助。如果是这种情况,增加 的值wait_timeout
只会推迟发生的时间,而不是解决问题。
The problem could be related with this:
问题可能与此有关:
- You open an hibernate session
- Do some things that take more time than the value of wait_timeoutof your database
- You try to use this hibernate session. The message that you comment here will appear
- 你打开一个休眠会话
- 做一些比你数据库的wait_timeout值花费更多时间的事情
- 您尝试使用此休眠会话。您在此处评论的消息将出现
I've documented a case in hereif you are interested.
如果您有兴趣,我在这里记录了一个案例。
回答by Saranga kapilarathna
Enter the below line (1) in c3po.properties file in your root derectory.(you should used hibenate-c3po 3.6.10 final.jar) And in the Hibeanate.cfg.xml used add (2) part .
在您的根目录中的 c3po.properties 文件中输入以下行 (1)。(您应该使用 hibenate-c3po 3.6.10 final.jar)并在 Hibeanate.cfg.xml 中使用 add (2) part 。
c3p0.testConnectionOnCheckout=true
<property name="hibernate.c3p0.idle_test_period">100</property> <property name="hibernate.c3p0.max_size">30</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.min_size">10</property> <property name="hibernate.c3p0.timeout">1800</property> <property name="hibernate.c3p0.validate">true</property> <property>
c3p0.testConnectionOnCheckout=true
<property name="hibernate.c3p0.idle_test_period">100</property> <property name="hibernate.c3p0.max_size">30</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.min_size">10</property> <property name="hibernate.c3p0.timeout">1800</property> <property name="hibernate.c3p0.validate">true</property> <property>