Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取HibernateException:内部连接池已达到最大大小,当前没有可用的连接_Java_Spring_Hibernate_Jpa_Jdbc - Fatal编程技术网

Java 获取HibernateException:内部连接池已达到最大大小,当前没有可用的连接

Java 获取HibernateException:内部连接池已达到最大大小,当前没有可用的连接,java,spring,hibernate,jpa,jdbc,Java,Spring,Hibernate,Jpa,Jdbc,我得到org.hibernate.HibernateException:内部连接池已达到最大大小,当前没有可用的连接!我认为问题是由于会话处理不正确造成的。有人能建议正确的方法吗 这是我的服务课 @Service public class DataService { @Autowired private SessionFactory sessionFactory; public User createUser(User newUser) { Sessi

我得到org.hibernate.HibernateException:内部连接池已达到最大大小,当前没有可用的连接!我认为问题是由于会话处理不正确造成的。有人能建议正确的方法吗

这是我的服务课

@Service
public class DataService {

    @Autowired
    private SessionFactory sessionFactory;

    public User createUser(User newUser) {
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        session.save(newUser);
        session.getTransaction().commit();
        session.close();
        return newUser;
    }

    public User findUser(UUID userId) {
        Session session = sessionFactory.openSession();
        session.beginTransaction();
        try {
            return session.get(User.class, userId);
        } finally {
            session.close();
        }
    }
}
下面是我的Hibernate配置。我认为我的配置是正确的。我的会话实例化和关闭服务类是错误的

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/rest_database?useSSL=false</property>
        <property name="connection.username">admin</property>
        <property name="connection.password">admin</property>

        <property name="connection.pool_size">1</property>
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <property name="show_sql">true</property>
        <property name="current_session_context_class">thread</property>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.dbcp.initialSize">5</property>
        <property name="hibernate.dbcp.maxTotal">20</property>
        <property name="hibernate.dbcp.maxIdle">10</property>
        <property name="hibernate.dbcp.minIdle">5</property>
        <property name="hibernate.dbcp.maxWaitMillis">-1</property>

        <mapping class="com.in.models.User" />
    </session-factory>

</hibernate-configuration>

com.mysql.cj.jdbc.Driver
jdbc:mysql://localhost:3306/rest_database?useSSL=false
管理
管理
1.
org.hibernate.dialogue.mysql5dialogue
真的
线
更新
5.
20
10
5.
-1
在我的hibernate.cfg.xml中,连接池大小为1

<property name="connection.pool_size">1</property>
1
我的db查询浏览器(DBeaver)已经连接到我的数据库,因此当我试图保存对象时,它给出了hibernate异常-没有可用的连接

当我在hibernate.cfg.xml中将连接池大小增加到2时。已解决异常,因为数据库允许2个连接

<property name="connection.pool_size">2</property>
2
在我的hibernate.cfg.xml中,连接池大小为1

<property name="connection.pool_size">1</property>
1
我的db查询浏览器(DBeaver)已经连接到我的数据库,因此当我试图保存对象时,它给出了hibernate异常-没有可用的连接

当我在hibernate.cfg.xml中将连接池大小增加到2时。已解决异常,因为数据库允许2个连接

<property name="connection.pool_size">2</property>
2

看起来您并不是在关闭
数据服务中的会话,因此可能会出现连接不足的情况。@Occs2K I更新了类,但仍然收到相同的错误。我有一个数据库查询浏览器连接到我的数据库,因此在我的配置中只有一个允许的连接,并且查询浏览器已经连接。是因为这个原因吗,它的连接正在耗尽?您的池大小为1。此外,如果
createUser
中出现错误,则您的代码也有缺陷。您正在泄漏会话,从而导致连接泄漏。看起来您并没有关闭
DataService
中的会话,因此可能会断开连接。@rocus2k I更新了该类,但仍然收到相同的错误。我有一个数据库查询浏览器连接到我的数据库,因此在我的配置中只有一个允许的连接,并且查询浏览器已经连接。是因为这个原因吗,它的连接正在耗尽?您的池大小为1。另外,如果
createUser
中出现错误,您的代码也有缺陷。您正在泄漏会话,从而导致连接泄漏。很好的捕获。一个警告。禁止连接。池大小根据其自己的api不应在生产环境中使用。应该删除该值并使用第三方,如配置中已经引用的dbcp。应用程序的连接池大小与DBeaver无关。正在连接的DBeaver不会从应用程序中的连接池租用连接。这是一个好问题。一个警告。禁止连接。池大小根据其自己的api不应在生产环境中使用。应该删除该值并使用第三方,如配置中已经引用的dbcp。应用程序的连接池大小与DBeaver无关。正在连接的DBeaver不会从应用程序中的连接池租用连接。