Hibernate内部连接池大小以某种方式泄漏?

时间:2018-01-12 08:34:25

标签: java hibernate

我正在使用Hibernate进行数据库管理。我正在获得连接池大小达到其最大大小异常,虽然我关闭了我在完成后立即打开的每个会话。

以下是我的DAO中的一个函数,它提供了异常:

@Override
public Book find(String bookLink) {
    Session session = sessionFactory.openSession();
    Transaction tx = session.beginTransaction();

    Query query = session.createQuery("from Book where link = :link");
    query.setParameter("link", bookLink);
    List<Book> list = query.list();
    tx.commit();

    session.close();
    return list.size() > 0 ? list.get(0) : new Book();
}

以下是例外:

org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.poll(PooledConnections.java:82)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:186)
    at org.hibernate.internal.NonContextualJdbcConnectionAccess.obtainConnection(NonContextualJdbcConnectionAccess.java:35)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.acquireConnectionIfNeeded(LogicalConnectionManagedImpl.java:99)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getPhysicalConnection(LogicalConnectionManagedImpl.java:129)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.getConnectionForTransactionManagement(LogicalConnectionManagedImpl.java:247)
    at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.begin(LogicalConnectionManagedImpl.java:254)
    at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.begin(JdbcResourceLocalTransactionCoordinatorImpl.java:203)
    at org.hibernate.engine.transaction.internal.TransactionImpl.begin(TransactionImpl.java:56)
    at org.hibernate.internal.AbstractSharedSessionContract.beginTransaction(AbstractSharedSessionContract.java:387)
    at com.kitaplist.common.book.dao.HibernateBookDao.find(HibernateBookDao.java:35)
    at com.kitaplist.common.Collector.lambda$collectMetaBooks$1(Collector.java:135)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)

这是hibernate.cfg.xml文件:

<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
    <session-factory>

        <property name="hibernate.dialect">
            org.hibernate.dialect.MySQLDialect
        </property>

        <property name="hibernate.connection.driver_class">
            com.mysql.jdbc.Driver
        </property>
        <property name="hibernate.current_session_context_class">thread</property>
        <!-- Assume students is the database name -->

        <property name="hibernate.connection.url">
            jdbc:mysql://localhost:3306/db
        </property>

        <property name="hibernate.connection.username">
            root
        </property>
        <property name="show_sql">false</property>
        <property name="hibernate.generate_statistics">false</property>
        <property name="hibernate.use_sql_comments">false</property>

        <property name="hibernate.connection.password">
            pass
        </property>

    </session-factory>
</hibernate-configuration>

我错过了什么?

0 个答案:

没有答案