【发布时间】:2016-04-20 09:21:57
【问题描述】:
我有一个用于 Android 应用程序的 RESTful API。 一切正常,但一段时间后我的数据库连接用完了。
我正在使用 MySQL Workbench 监控客户端连接,每次我登录用户时,连接数都会增加。 (它们都没有被重新使用或关闭)。
这是我的示例选择查询以根据他的身份验证令牌获取用户信息:
Session session = HibernateUtil.getSessionFactory().openSession();
String sql = "SELECT * FROM user WHERE token = :token";
SQLQuery query = session.createSQLQuery(sql);
query.addEntity(User.class);
query.setParameter("token", authToken);
List results = query.list();
if(results.isEmpty()){
session.close();
return null;
}
else {
session.close();
return (User) results.get(0);
}
HibernateUtil.java 类设置如下:
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
public static SessionFactory createSessionFactory() {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()). buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
public static SessionFactory getSessionFactory() {
if(sessionFactory != null)
return sessionFactory;
else
return createSessionFactory();
}
即使我在做 session.close();客户端连接不断增加,直到达到 MySQL 阈值,它给了我太多连接的错误。
我环顾四周试图找到答案,但似乎没有任何帮助...感谢任何指导!
谢谢 迈克
编辑:
这是我的配置文件(hibernate.cgf.xml)
<property name="hibernate.current_session_context_class">org.hibernate.context.internal.ThreadLocalSessionContext</property>
<property name="hibernate.c3p0.min_size">0</property>
<property name="hibernate.c3p0.max_size">1</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.max_statements">50</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.maxConnectionAge">0</property>
【问题讨论】:
-
您能发布您的休眠配置使用的连接设置吗?
标签: java mysql hibernate rest jersey