当前位置: 首页 > 面试题库 >

如何防止Hibernate + c3p0 + MySql创建大量睡眠连接?

衡安晏
2023-03-14
问题内容

我正在将GWT与Hibernate,c3p0和MySQL结合使用,以产生一个受众有限的网络应用程序(每天最多50个用户)。在测试期间,我发现无论使用哪种close()方法,Hibernate都在打开每个会话的连接,但没有关闭它。

我当前的配置如下:

hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=
hibernate.connection.username=
hibernate.connection.password=
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.current_session_context_class=thread
hibernate.c3p0.min_size=1
hibernate.c3p0.max_size=1
hibernate.c3p0.timeout=10
hibernate.c3p0.max_statements=50
hibernate.c3p0.idle_test_period=10
hibernate.c3p0.unreturned_connection_timeout=1
hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider

通过与应用程序的每个新连接,将创建一个新池。例如,如果我将池大小设置为3,则到应用程序的2个连接导致6个连接,直到应用程序关闭。

预期的行为是在每个事务之后简单地关闭或重用连接。我该如何实现?


问题答案:

在测试过程中,我发现无论使用close()方法如何,Hibernate都在打开每个会话的连接,但没有关闭它

使用连接池时,调用Connection#close()不会物理上关闭连接,而是将其返回到池中以供将来重用。换句话说,连接保持打开状态,这就是使用池的全部要点。

我称之为:AnnotationConfiguration()。buildSessionFactory()。getCurrentSession();

好吧,这就是问题所在。您正在创建SessionFactory一遍又一遍(每个都创建自己的池),而在应用程序的整个生命周期中 只能 创建
一次 。如果您不使用任何特定框架,则通常是在某些实用程序类(著名的HibernateUtil类)中完成的。

官方的《Hibernate教程》提供了此类的非常基本的示例。或者看一下这个更丰富的东西。



 类似资料:
  • 问题内容: 在开发过程中,本地WAMP服务器如何从测试服务器获取最新数据是对数据库进行了转储,然后使用source命令上载该转储以加载.sql文件。 最近,在导入的最后,我们遇到了有关@old变量的错误,这些变量在更改原始设置(如外键约束)之前存储了这些设置(因此请关闭外键约束,以使导入不会在以下情况下引发错误)它会重新创建表,并在尚未创建表之一时尝试创建外键。我发现原因是产品表获取越来越多的数据

  • 我试图将每个列表都位于嵌套对象内的webservice模型映射到更简单的对象。 模型1 映射非常简单: 映射工作正常,除了一个问题。当我将带有null子级的父母映射到父母2并返回父母时,儿童对象是用空列表创建的。有什么方法可以防止这种情况吗?

  • 问题内容: 我目前正在尝试学习nodejs,而我正在做的一个小项目正在编写一个API,以控制一些联网的LED灯。 控制LED的微处理器具有处理延迟,我需要将发送给微控制器的命令间隔至少100毫秒。在C#中,我习惯于仅调用Thread.Sleep(time),但在node中没有找到类似的功能。 我已经找到了在节点中使用setTimeout(…)函数的几种解决方案,但是,这是异步的并且不会阻塞线程(这

  • 问题内容: 我正在编写一个在Linux上运行的Java应用程序(使用Sun的JDK)。它一直在创建目录,我想防止这样做。有什么方法可以阻止Java创建这些文件? 问题答案: 尝试JVM选项 -XX:-UsePerfData 更多信息 来自链接https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html的以下内容可能会有所帮

  • 我有一个Karaf计划,包含以下组件: Karaf 4.0.7; Hibernate4.3.7; MySQL JDBC连接器5.1.27; C3P0 0.9.5. 我刚刚建立了一个新的开发环境,我正在使用Mysql 8.0.11(最近才发布)。我已经在本地将Mysql Connector升级到5.1.46,这样它就可以与Mysql 8兼容,而且基本上可以正常工作。但是,我在Karaf控制台中收到一

  • 我有一个使用Struts1.3、Hibernate3和Spring Security开发的web应用程序。由于MySQL在此时间之后关闭了连接,该应用程序在8小时后就停止了运行。然后我从几个帖子中收集信息,使它保持很长时间,现在差不多是20-24小时。有没有人能帮我把这东西弄好。 摘要 Iam在不活动20小时后无法登录。连接被MySQL关闭。 多谢了。 C3p0日志 INFO AbstractPo