当前位置: 首页 > 面试题库 >

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

伏砚
2023-03-14
问题内容

我正在尝试获取一些传递并运行的代码。它似乎使用了Hibernate框架。我已经克服了调整配置时的大多数错误,但这使我陷入了困境。

它正在尝试连接到两个数据库:gameapp和gamelog。两者都存在。似乎有问题连接到gamelog,但没有问题连接到gameapp(在init之后,它可以连接并加载其他数据库就很好了)。在下面,我粘贴了错误和异常堆栈转储。

我想像一下配置中还有其他内容,所以我还包括了该数据库的配置文件。我知道这很模糊,但是我希望一些专业人士可以看到我所缺少的愚蠢错误。

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://127.0.0.1:3306/gamelog</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        <property   name="connection.useUnicode">true</property>     
            <property   name="connection.characterEncoding">UTF-8</property>   
        <property name="hibernate.jdbc.batch_size">100</property>
        <property name="jdbc.fetch_size">1</property>
        <property name="hbm2ddl.auto">none</property><!-- update -->
        <property name="connection.useUnicode">true</property>
        <property name="show_sql">true</property>
        <!-- c3p0-configuration -->
        <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property> 
        <property name="hibernate.c3p0.min_size">5</property>
        <property name="hibernate.c3p0.max_size">10</property>
        <property name="hibernate.c3p0.timeout">30</property>
        <property name="hibernate.c3p0.idle_test_period">30</property>
        <property name="hibernate.c3p0.max_statements">0</property>
        <property name="hibernate.c3p0.acquire_increment">5</property>      
    </session-factory>
</hibernate-configuration>

异常和堆栈跟踪:

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.<init>(Unknown Source)
    at com.database.hibernate.util.HibernateUtil.<clinit>(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
Metadata默认值可能会产生副作用。



 类似资料:
  • 我已经为一个服务实现了socket.io,然后删除了它。但是,我仍然有客户机向endpoint/socket.io发出初始连接请求,而endpoint/socket.io已经不存在了。使用各种http状态代码进行响应似乎并不重要。 是否有方法阻止客户端尝试连接?我每分钟收到几千个请求。

  • 我正在尝试运行以下Sqoop命令: 然而,我得到了这个错误: 17/02/04 00:04:53 警告安全。用户组信息: 特权行动例外作为:avinash (身份验证:简单) 原因:java.io.文件不发现异常: 文件不存在: hdfs://localhost:9000/home/avinash/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/slf4j-api-

  • 我正在尝试获取一个简单的API请求来获取比特币值,在浏览器地址http://127.0.1:3000/中,在我的chrome浏览器中,我在浏览器上得到一个“无法获取/”,当我打开dev tools时得到一个404,上面写着“获取http://127.0.1:3000/404(Not Found)”。 当我访问http://127.0.0.1:3000/etf时,我得到了一个我需要的数据对象,所以我

  • 尝试使用cmd连接SQL数据库时出错。这是我的节目。我使用jdk 6版本来编译和运行,谢谢。 错误:

  • 我们使用PgBouncer作为基于spring的应用程序连接池的中间件。在应用程序中,我们使用HikariCP进行应用程序级连接池。 我们将HikariCP的值设置为一小时,将设置为30秒。