内容简介:将数据库连接配置的自动提交auto-commit关闭,使用Spring/Spring Boot框架连接数据库时,如果使用的是非JTA事务,也就是JDBC事务,称为resource-local本地资源事务,应该将连接池(例如HikariCP)中的自动提交禁止,同时配置Hibernate如下配置属性,这样能够延迟Hibernate的连接获取时间,大大提高性能:在Hibernate中,数据库连接获取以及连接释放与当前正在运行的事务的类型有关:
将数据库连接配置的自动提交auto-commit关闭,
使用Spring/Spring Boot框架连接数据库时,如果使用的是非JTA事务,也就是JDBC事务,称为resource-local本地资源事务,应该将连接池(例如HikariCP)中的自动提交禁止,同时配置Hibernate如下配置属性,这样能够延迟Hibernate的连接获取时间,大大提高性能:
<property name="hibernate.connection.provider_disables_autocommit" value="true"/>
在Hibernate中,数据库连接获取以及连接释放与当前正在运行的事务的类型有关:
1. resource-local本地资源:适用于JDBC事务,针对一个DataSource,当事务开始,Connection立即获取;在事务结束时关闭(提交或回滚也是)
2. JTA:适合XA事务,可跨越多个DataSource(s),Connection是在第一次执行 SQL 语句 时获得,每条语句执行后释放。如果底层应用服务器允许,可以忽视这种积极的连接释放机制。
我们的目标是使资源本地事务像JTA一样延迟Connection的获取,直到Hibernate需要执行第一条JDBC语句。
为什么Hibernate会立即获得Connection呢?因为Hibernate需要获得Connection以后检查底层JDBC Connection的自动提交状态,如果Connection设置为自动提交,Hibernate要去禁用它,并确保SQL语句在同一数据库事务的上下文中执行,虽然这种行为是正确的,因为Hibernate如果不获得Connection就无法知道自动提交标志是否已设置。
我们可以提示Hibernate跳过此检查,因为我们已经知道所有JDBC Connection(s)都以手动提交模式运行。所有企业应用程序都已使用连接池,可在数据库连接建立第一时间内禁用自动提交模式。
HikariConfig hikariConfig = super.hikariConfig( dataSource );
hikariConfig.setAutoCommit( false );
出于这个原因,Hibernate 5.2.10引入了hibernate.connection.provider_disables_autocommit配置属性,该属性告诉Hibernate:底层的JDBC Connection(s)已经禁用了自动提交模式。
性能对比有很大提高
以上所述就是小编给大家介绍的《禁用Hibernate本地事务自动提交可大大提高性能》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 如何临时或永久地禁用SELinux
- iphone – 移动CALayers时禁用动画
- 当浏览器全面禁用三方 Cookie
- Bootstrap禁用响应式布局的实现方法
- 如何绕过PHP中被禁用的函数
- php – 禁用表单元素的POST值
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法技术手册(原书第2版)
George T. Heineman、Gary Pollice、Stanley Selkow / 杨晨、曹如进 / 机械工业出版社 / 2017-8-1 / 89.00元
本书使用实际代码而非伪代码来描述算法,并以经验主导支撑数学分析,侧重于应用且规范严谨。本书提供了用多种程序设计语言实现的文档化的实际代码解决方案,还介绍了近40种核心算法,其中包括用于计算点集的Voronoi图的Fortune算法、归并排序、多线程快速排序、AVL平衡二叉树实现以及空间算法。一起来看看 《算法技术手册(原书第2版)》 这本书的介绍吧!