【发布时间】:2020-03-09 13:48:13
【问题描述】:
我收到 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();
}
}
}
下面是我的休眠配置。我认为我的配置是正确的。我的 Session 实例化和关闭服务类是错误的。
<!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>
【问题讨论】:
-
您似乎没有在
DataService中关闭会话,因此您可能会用完连接。 -
@locus2k 我更新了课程,但仍然遇到同样的错误。我有一个连接到我的数据库的数据库查询浏览器,所以在我的配置中只有 1 个允许连接并且查询浏览器已经连接。是不是因为这个,连接用完了?
-
您的池大小为 1。如果
createUser出现错误,您的代码也存在缺陷,您正在泄漏会话并因此连接。
标签: java spring hibernate jpa jdbc