先贴一张错误图
要解决该问题首先我们要明确一件事,那就是Hibernate openSession() 和 getCurrentSession的区别
具体区别如下
getHiberanteTemplate 、getCurrentSession和OpenSession
采用getCurrentSession()创建的Session会绑定到当前的线程中去、而采用OpenSession()则不会。
采用getCurrentSession()创建的Session在commit或rollback后会自动关闭,采用OpenSession()必须手动关闭。
采用getCurrentSession()需要在Hibernate.cfg.xml配置文件中加入如下配置:
如果是本地事物,及JDBC一个数据库:
thread
如果是全局事物,及jta事物、多个数据库资源或事物资源:
使用spring的getHiberanteTemplate 就不需要考虑事务管理和session关闭的问题:
openSession创建session时autoCloseSessionEnabled参数为false,即在事物结束后不会自动关闭session,需要手动关闭,如果不关闭将导致session关联的数据库连接无法释放,最后资源耗尽而使程序当掉。
注意:这一句话就是我们连接池爆满的原因
getCurrentSession创建session时autoCloseSessionEnabled,flushBeforeCompletionEnabled都为true,并且session会同sessionFactory组成一个map以sessionFactory为主键绑定到当前线程。
getCurrentSession():从上下文(配置文件current_session_context_class: thread 使用Connection自动管理;jta(java transaction api) 由Application Server提供的分布式事务管理,Tomcat本身不具备此能力,JBoss、WebLogic具备)找,如果有,则用旧的,否则创建新的,事务提交自动Close;
getCurrentSession本地事务(本地事务:jdbc)时 要在配置文件里进行如下设置:
如果使用的是本地事务(jdbc事务)
thread
如果使用的是全局事务(jta事务)
jta
getCurrentSession () 使用当前的session
openSession() 重新建立一个新的session
在一个应用程序中,如果DAO 层使用Spring 的hibernate 模板,通过Spring 来控制session 的生命周期,则首选getCurrentSession ()。
最后!!!!综上所述!!!!!!
导致我们连接池爆满的原因就是我们采用了openSession()来获取session对象,并且在用完后没有关闭我们的session对象,所以解决办法有三种
1.在执行完相应的业务后调用session.close()方法关闭该session对象
2.使用getCurrentSession()替换OpenSession()来获取session
3.使用spring的getHiberanteTemplate来获取session
附图:
Caused by: org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!先贴一张错误图要解决该问题首先我们要明确一件事,那就是Hibernate openSession() 和 g...
影响
Hibernate
性能的因素
用了一段时间的
hibernate
后,总结了一些开发人员应该注意的一些影响其效率的细节。
1、不同的主健生成机制对性能的影响<o:p></o:p>
通常的生成机制又10几种,说一些常用的吧。数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次...
问题描述:
Hibernate
使用时发现了一个问题,就是当请求超过20次的时候tomcat就会卡死,tomcat进程没有挂掉,堆内存也没用溢出,经检查是卡在
查询
这一块。
应用程序采用struts2 + spring2 +
hibernate
3架构
连接池
配置使用的是c3p0,最大池大小为20, 很显然是
连接池
耗尽
导致
的。增加
连接池
大小只是饮鸩止渴,总还有耗尽的时候。
最开始Dao层代码
public class RiskMapDao extends BaseDaoSupport{
public Pa.
1. 打开PyCharm。
2. 在菜单栏中选择“File”>“Settings”。
3. 在左侧面板中选择“Project: [您的项目名称]”>“Project Interpreter”。
4. 在右侧面板中,您将看到您当前使用的Python解释器。如果Python 3.1被列为解释器之一,请选择另一个版本的Python,例如Python 3.7或3.8。
5. 如果您没有适当的Python版本,请单击“Add”按钮并安装所需的Python版本。
6. 选择新的Python解释器并单击“OK”按钮。
现在,您的PyCharm应该使用最新版本的Python,解决了Python 3.1不再受支持的问题。