bonecp

HikariCP

江枫思渺然 提交于 2021-02-12 03:13:51
数据库连接池技术 数据库连接池负责分配、管理和释放数据库的连接。 数据库连接复用。重复使用现有的数据库连接,可以避免连接频繁建立、关闭的开销。 统一的连接管理。释放空闲时间超过最大空闲时间的数据库连接,避免因为没有释放数据库连接而引起的数据库连接泄漏。 HikariCP 字节码精简:优化代码,直到编译后的字节码最少,这样,CPU缓存可以加载更多的程序代码; 优化代理和拦截器:减少代码,例如HikariCP的Statement proxy只有100行代码,只有BoneCP的十分之一; 自定义数组类型(FastStatementList)代替ArrayList:避免每次get()调用都要进行range check,避免调用remove()时的从头到尾的扫描; 自定义集合类型(ConcurrentBag):提高并发读写的效率; 其他针对BoneCP缺陷的优化,比如对于耗时超过一个CPU时间片的方法调用的研究(但没说具体怎么优化)。 数据库连接中断的情况测试: HikariCP:等待5秒钟后,如果连接还是没有恢复,则抛出一个SQLExceptions 异常;后续的getConnection()也是一样处理; C3P0:完全没有反应,没有提示,也不会在“CheckoutTimeout”配置的时长超时后有任何通知给调用者;然后等待2分钟后终于醒来了,返回一个error; Tomcat

数据库连性池性能测试(hikariCP,druid,tomcat-jdbc,dbcp,c3p0)

寵の児 提交于 2020-11-22 03:36:11
文章转自 https://www.tuicool.com/articles/qayayiM 摘要: 本文主要是对这hikariCP,druid,tomcat-jdbc,dbcp,c3p0几种连接池的详细的功能和性能测试对比,通过这次测试对目前主流的一些连接池做一个全面的对比,从而给业务系统一个最佳的推荐。而唯品会venus-data支持三种连接池DBCP、C3P0、DRUID,其中C3P0作为默认的连接池。因此需要针对现状,研发一种分布式数据库连接池。 测试结论 性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。 druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。 综合考虑到目前venus已经支持druid且hikariCP并未发现有太多大规模的生产实践的案例,后续将推荐使用druid并把codegen生成的代码默认连接池为druid。 可开启prepareStatement缓存,对性能会有大概10%的提升。 功能对比 功能 dbcp druid c3p0 tomcat-jdbc HikariCP 是否支持PSCache 是 是 是 否 否 监控 jmx jmx/log/http jmx,log jmx jmx 扩展性 弱 好 弱 弱 弱 sql拦截及解析 无 支持

跟我学Springboot开发后端管理系统4:数据库连接池Druid和HikariCP

a 夏天 提交于 2020-08-06 04:27:21
上一篇文章主要讲解了如何再Matrix-Web中使用Mybatis-Plus,Mybatis-Plus作为Orm框架,连接数据库需要连接数据库的依赖。WEB 系统高并发环境下,频繁的进行数据库连接操作,造成系统技术瓶颈问题(无效的资源开销),通过为数据库连接为建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。 数据库连接池有很多,比如c3p0、Druid、Hikari等。大家常用的连接池应该是阿里开源的Druid,Druid不仅是连接池,而且带有监控。在Matrix-Web中,选择的Druid作为数据库连接池。Hikari作为Spring Boot官方推荐的连接池,在这里也讲解一下。 在Spring Boot中使用Druid Druid是阿里开发的一个数据库连接池,在国内比较的流行,具有以下的特性: 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。 SQL执行日志,Druid提供了不同的LogFilter,能够支持Common

MyBatis框架高级应用详解

眉间皱痕 提交于 2020-07-25 20:59:11
项目已托管到 GitHub ,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! MyBatis 一、ORM概述 对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 ORM 二、ORM映射 2.1 MyBatis自动ORM失效 MyBatis只能自动维护库表“列名”与“属性名”相同时的一一对应关系,二者不同时,无法自动ORM。 自动ORM失效 007 2.2 解决方式一:列的别名 在SQL中使用 as 为查询字段添加列别名,以匹配属性名。 <mapper namespace= "com.mylifes1110.dao.ManagerDao" > <select id= "selectManagerByIdAndPwd" resultType= "com.mylifes1110.bean.Manager" > SELECT mgr_id AS id , mgr_name AS username , mgr_pwd AS password FROM t_managers WHERE mgr_id = #{id} AND mgr_pwd = #{pwd} </select> <

Failed to instantiate SLF4J LoggerFactory

天涯浪子 提交于 2020-05-28 06:37:11
问题 So, I'm working from this example BONECP: package javasampleapps; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.jolbox.bonecp.BoneCP; import com.jolbox.bonecp.BoneCPConfig; /** A test project demonstrating the use of BoneCP in a JDBC environment. * @author wwadge */ public class BoneCPExample { /** Start test * @param args none expected. */ public static void main(String[] args) { BoneCP connectionPool = null;

Failed to instantiate SLF4J LoggerFactory

十年热恋 提交于 2020-05-28 06:37:05
问题 So, I'm working from this example BONECP: package javasampleapps; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.jolbox.bonecp.BoneCP; import com.jolbox.bonecp.BoneCPConfig; /** A test project demonstrating the use of BoneCP in a JDBC environment. * @author wwadge */ public class BoneCPExample { /** Start test * @param args none expected. */ public static void main(String[] args) { BoneCP connectionPool = null;

Using BoneCP: Handling connections from the pool

此生再无相见时 提交于 2019-12-30 03:19:06
问题 I have just started using BoneCP and this is my first time using a connection pool. I'm somewhat confused as to how I am supposed to use it. Currently I am saving the BoneCP-object as a static variable, and thus I can use it between different connections. When I'm done with the connection, I close it with connection.close() . Should I do this, or should I not close it to enable it to be reused by the pool? This is my current implementation to get a connection: private static BoneCP

Defining an alternate connection pool in Grails 2.3.6

醉酒当歌 提交于 2019-12-19 02:42:30
问题 I know that, at some point between Grails 1.X and Grails 2.X, the default connection pooling library changed from commons-dbcp to tomcat-dbcp . Now, I'm trying to configure either BoneCP or HikariCP as the connection pooling library for my Grails application. However, I see that this answer offers a solution which might only apply to Grails 1.X. I also found this Gist, but again, I don't know which Grails version it applies to. So, is it possible to define a custom connection pool inside a

Defining an alternate connection pool in Grails 2.3.6

落花浮王杯 提交于 2019-12-19 02:42:13
问题 I know that, at some point between Grails 1.X and Grails 2.X, the default connection pooling library changed from commons-dbcp to tomcat-dbcp . Now, I'm trying to configure either BoneCP or HikariCP as the connection pooling library for my Grails application. However, I see that this answer offers a solution which might only apply to Grails 1.X. I also found this Gist, but again, I don't know which Grails version it applies to. So, is it possible to define a custom connection pool inside a

Heroku/Play/BoneCp connection issues

给你一囗甜甜゛ 提交于 2019-12-17 19:49:51
问题 I have an app on heroku that uses play. It was working fine for the longest time, but somewhat recently I started getting this: Caused by: java.sql.SQLException: Timed out waiting for a free available connection. at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169) ~[hibernate-core-4.1.9.Final.jar:4.1.9.Final] at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[bonecp-0.7.1.RELEASE.jar:0.7.1.RELEASE] which is caused by org