hibernate SessionFactory.openSession()是否等待池中的数据库连接可用

保罗·泰勒(Paul Taylor):

休眠是否SessionFactory.openSession()等待池中的数据库连接可用?

我以为是这样,但是我有这个例外的客户

org.hibernate.exception.GenericJDBCException: Could not open connection
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:235)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:171)
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:67)
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162)
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1471)
    at com.jthink.songlayer.hibernate.HibernateUtil.beginTransaction(HibernateUtil.java:192)
    at com.jthink.songkong.analyse.analyser.MusicBrainzSongMatcher.call(MusicBrainzSongMatcher.java:83)
    at com.jthink.songkong.analyse.analyser.MusicBrainzSongMatcher.call(MusicBrainzSongMatcher.java:35)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at com.jthink.songkong.analyse.analyser.MainAnalyserService$EnsureIncreaseCountIfRunOnCallingThread.rejectedExecution(MainAnalyserService.java:100)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
    at com.jthink.songkong.analyse.analyser.MainAnalyserService.submit(MainAnalyserService.java:121)
    at com.jthink.songkong.analyse.analyser.MusicBrainzMetadataMatcher.processMetadataFailedToMatch(MusicBrainzMetadataMatcher.java:107)
    at com.jthink.songkong.analyse.analyser.MusicBrainzMetadataMatcher.call(MusicBrainzMetadataMatcher.java:381)
    at com.jthink.songkong.analyse.analyser.MusicBrainzMetadataMatcher.call(MusicBrainzMetadataMatcher.java:34)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database!
    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:689)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
    at org.hibernate.c3p0.internal.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:90)
    at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:380)
    at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:228)
    ... 20 more
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1418)
    at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:606)
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:526)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutAndMarkConnectionInUse(C3P0PooledConnectionPool.java:755)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:682)

让我觉得不是,或者是等待了一段时间然后放弃了,我正在将Hibernate 4.3.11C3p0H2 1.5一起使用

我的休眠配置是

    config.setProperty("hibernate.c3p0.min_size","1");
    config.setProperty("hibernate.c3p0.max_size","50");
    config.setProperty("hibernate.c3p0.max_statements","3000");
    config.setProperty("hibernate.c3p0.timeout","2000");
    config.setProperty("hibernate.c3p0.maxStatementsPerConnection","50");
    config.setProperty("hibernate.c3p0.idle_test_period","3000");
    config.setProperty("hibernate.c3p0.acquireRetryAttempts","10");
MostafaMashayekhi:

Hibernate SessionFactory的 openSession()方法总是打开一个新的会话。完成所有数据库操作后,应关闭此会话对象。会话对象不是线程安全的,您应该在多线程环境中为每个请求打开一个新会话

基于这种参考https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/SessionFactory.html#openSession()

会话openSession()抛出HibernateException打开会话。JDBC连接将根据需要从配置的ConnectionProvider中获得,以执行请求的工作。

返回:创建的会话。抛出:HibernateException-指示打开会话的障碍;在这里非常难得。

您也可以检查此链接来解决问题:

ResourcePool无法从其主要工厂或来源获取资源

com.mchange.v2.resourcepool.CannotAcquireResourceException:ResourcePool无法从其主工厂或源中获取资源

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Hibernate的Sessionfactory.getCurrentSession()和SessionFactory.openSession()的区别

Hibernate 4中的SessionFactory.openSession(Connection)

由于“无法创建与数据库服务器的连接”而导致无法构建Hibernate SessionFactory。

通过“ sessionFactory”的不满意的依赖;没有可用的'org.hibernate.SessionFactory'类型的合格bean

Hibernate SessionFactory与Spring LocalSessionFactoryBean

Hibernate SessionFactory与JPA EntityManagerFactory

Hibernate + Spring SessionFactory配置

如何在Spring Boot中自动连接Hibernate SessionFactory

创建Hibernate SessionFactory时如何设置数据源?

使用Spring Hibernate Sessionfactory从数据库中选择一个项目

java.lang.NoSuchMethodError:org.hibernate.SessionFactory.openSession()Lorg / hibernate / classic / Session

Spring 3.1,Hibernate 4,SessionFactory

使用hibernate sessionFactory还是JPAEntityManager?

Hibernate SessionFactory,动态设置TransactionIsolationLevel

Hibernate初始SessionFactory创建失败

获取文件路径-Hibernate SessionFactory

Hibernate sessionFactory的程序化配置需要“ sessionFactory”或“ hibernateTemplate”

会话打开时如何使Hibernate SessionFactory从c3p0签出JDBC连接?

Micronaut数据-没有类型为[org.hibernate.SessionFactory]的bean

定义在Hibernate SessionFactory之前启动的Micronaut bean

无法建立Hibernate SessionFactory;嵌套异常

Spring / Hibernate集成中的NPE SessionFactory

正确配置以模拟Hibernate的sessionFactory.getCurrentSession()

NoSuchMethodError:org.hibernate.SessionFactory.getCurrentSession()

Spring Boot 2:无法构建Hibernate SessionFactory

Jersey + Hibernate将SessionFactory注入DAO

Hibernate 4在Abstract Factory中创建sessionfactory

插入值无法使用Hibernate SessionFactory

Spring 4 + Hibernate 4:sessionFactory为空