Java Hibernate / C3P0错误:“无法获取连接元数据。 客户端尝试签出连接的尝试已经超时。“

我正在尝试获取一些我已经通过并运行的代码。 它似乎使用Hibernate框架。 我已经完成了调整配置的大部分错误,但这个让我感到难过。

它试图连接到两个数据库:gameapp和gamelog。 两者都存在。 它似乎有连接到游戏日志的问题,但没有连接到gameapp(后来在init中,它连接并加载其他DB就好了)。 下面,我已经粘贴了错误和exception堆栈转储。

我在configs中成像了其他东西,所以我还包括了该db的配置文件。 我知道这很模糊,但我希望有些职业选手可以看到我错过的愚蠢错误。

    org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://127.0.0.1:3306/gamelog root  true UTF-8 100 1 none true true  org.hibernate.connection.C3P0ConnectionProvider 5 10 30 30 0 5   

exception和堆栈跟踪:

 2010-04-30 17:50:00,411 WARN [org.hibernate.cfg.SettingsFactory] - Could not obtain connection metadata java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:527) at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:35) at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:76) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:1933) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1216) at com.database.hibernate.util.HibernateFactory.(Unknown Source) at com.database.hibernate.util.HibernateUtil.(Unknown Source) at com.server.databaseop.goodOp.GoodOpImpl.initBreedGoods(Unknown Source) at com.server.databaseop.goodOp.GoodOpImpl.access$000(Unknown Source) at com.server.databaseop.goodOp.GoodOpImpl$1.run(Unknown Source) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:165) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:636) Caused by: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@ca470 -- timeout at awaitAvailable() at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1317) at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) ... 18 more 

如果你已经将C3P0的“checkoutTimeout”属性设置为0以外的其他属性,那么你可能会超时(这是我的问题,解决方案:从500增加到2000毫秒)。

或者,这个警告有一个解决方法:

hibernate.temp.use_jdbc_metadata_defaults属性设置为false

在http://www.docjar.com/html/api/org/hibernate/cfg/SettingsFactory.java.html中找到了这一点,尽管可能存在没有Hibernate提取JDBC元数据默认值的副作用。

实际上,这甚至不是身份validation错误。 MySQL是否正在运行或绑定到localhost?

telnet 127.0.0.1 3306有效吗? 如果是这样,请在框中安装mysql客户端并尝试

mysql –user = root –ip = 127.0.0.1,看看会发生什么

检查您是否可以使用root用户在命令行上连接到gamelog mysql数据库,而不是密码(!)。 作为旁注,我建议为root设置密码并使用其他帐户从应用程序连接到数据库,但这是另一个故事。