最近在学JAVA, SSM, 照着网上的例子系统启动后总是报这个错(IDE :IEDA):

HTTP Status 500 - Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:

查看错误信息, 有关键词:"  Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver '" 字样, 

网上各种查, 后来经请教隔壁java妹子,换用连接池依赖包: durid. 启动后发现控制台有提示信息 访问数据库被拒绝, 遂查看jdbc.properties文件. 偶然间发现

细看, 每行后有一个空格, 隐隐感觉发现原因了(还好是换背景色了, 要不.....), 去掉空格后, 页面终于出来了!  

最后回到之前的配置, 查看异常发现如下 果然是 空格. WTF!!!

随后又去关注了下 durid. 参考文章(http://blog.csdn.net/qq_31125793/article/details/51241943)

背景

对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池 。

NOTE: 本文所有测试均是MySQL

测试结论

1:性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 。hikariCP的高性能得益于最大限度的避免锁竞争。

2:druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。

3:综合性能,扩展性等方面,可考虑使用druid或者hikariCP连接池。

4:可开启prepareStatement缓存,对性能会有大概20%的提升。

功能对比

功能 dbcp druid c3p0 tomcat-jdbc HikariCP
是否支持PSCache
监控 jmx jmx/log/http jmx,log jmx jmx
扩展性
sql拦截及解析 支持
代码 简单 中等 复杂 简单 简单
更新时间 2015.8.6 2015.10.10  2015.12.09   2015.12.3
特点 依赖于common-pool 阿里开源,功能全面 历史久远,代码逻辑复杂,且不易维护   优化力度大,功能简单,起源于boneCP
连接池管理 LinkedBlockingDeque 数组   FairBlockingQueue threadlocal+CopyOnWriteArrayList
  • 由于boneCP被hikariCP替代,并且已经不再更新,boneCP没有进行调研。
  • proxool网上有评测说在并发较高的情况下会出错,proxool便没有进行调研。
  • druid的功能比较全面,且扩展性较好,比较方便对jdbc接口进行监控跟踪等。
  • c3p0历史悠久,代码及其复杂,不利于维护。并且存在deadlock的潜在风险。

性能测试

环境配置:

CPU Intel(R) Xeon(R) CPU E5-2430 v2 @ 2.50GHz,24core
msyql version 5.5.46
tomcat-jdbc version 8.0.28
HikariCP version 2.4.3
c3p0 Version 0.9.5-pre8
dbcpVersion 2.0.1
druidVersion 1.0.5

1:获取关闭连接性能测试

测试说明:

  • 初始连接和最小连接均为5,最大连接为20。在borrow和return均不心跳检测
  • 其中打开关闭次数为: 100w次
  • 测试用例和mysql在同一台机器上面,尽量避免io的影响
  • 使用mock和连接mysql在不同线程并发下的响应时间

图形:

mock性能数据 (单位:ms)

  5 20 50 100
tomcat-jdbc 442 447 1,013 1,264
c3p0 4,480 5,527 7,449 10,725
dbcp 676 689 867 1,292
hikari 38 33 38 30
druid 291 293 562 985

MySQL性能数据 (单位:ms)

  5 20 50 100
tomcat-jdbc 436 453 1,033 1,291
c3p0 4,378 5,726 7,975 10,948
dbcp 671 679 897 1,380
hikari 96 82 87 78
druid 304 424 690 1,130

测试结果:

  • mock和mysql连接性能表现差不多,主要是由于初始化的时候建立了连接后期不再建立连接,和使用mock连接逻辑一致。
  • 性能表现:hikariCP>druid>tomcat-jdbc>dbcp>c3p0。
  • hikariCP 的性能及其优异。hikariCP号称java平台最快的数据库连接池。
  • hikariCP在并发较高的情况下,性能基本上没有下降。
  • c3p0连接池的性能很差,不建议使用该数据库连接池。

hikariCP性能分析:

  • hikariCP通过优化(concurrentBag,fastStatementList )集合来提高并发的读写效率。
  • hikariCP使用threadlocal缓存连接及大量使用CAS的机制,最大限度的避免lock。单可能带来cpu使用率的上升。
  • 从字节码的维度优化代码。 (default inline threshold for a JVM running the server Hotspot compiler is 35 bytecodes )让方法尽量在35个字节码一下,来提升jvm的处理效率。

2:查询一条语句性能测试

测试说明:

  • 初始连接和最小连接均为8,最大连接为8。在borrow和return均不心跳检测
  • 查询的次数为10w次,查询的语句为 1:打开连接 2:执行 :select 1 3:关闭连接
  • 测试用例和mysql在同一台机器上面,尽量避免io的影响

图形:

测试数据:

  5 8 20 50 100
tomcat-jdbc 2,178 1,495 1,769 1,818 1,858
c3p0 3,237 3,451 4,488 5,994 7,906
dbcp 2,816 1,935 2,097 2,243 2,280
hikari 2,299 1,546 1,682 1,751 1,772
druid 2,297 1,551 1,800 1,977 2,032

测试结果:

  • 在并发比较少的情况下,每个连接池的响应时间差不多。是由于并发少,基本上没有资源竞争。
  • 在并发较高的情况下,随着并发的升高,hikariCP响应时间基本上没有变动。
  • c3p0随着并发的提高,性能急剧下降。

 

3:pscache性能对比

测试说明:

  • 通过druid进行设置pscache和不设置pscache的性能对比
  • 初始连接和最小连接均为8,最大连接为8。在borrow和return均不心跳检测。并且执行的并发数为8.
  • 查询10w次。查询流程为:1:建立连接,2:循环查询preparestatement语句 3:close连接
  • 测试用例和mysql在同一台机器上面,尽量避免io的影响

测试数据:

cache 1,927
not cache 2,134

测试结果:

  • 开启psCache缓存,性能大概有20%幅度的提升。可考虑开启pscache.

测试说明:

    • psCache是connection私有的,所以不存在线程竞争的问题,开启pscache不会存在竞争的性能损耗。
    • psCache的key为prepare执行的sql和catalog等,value对应的为prepareStatement对象。开启缓存主要是减少了解析sql的开销。

题外话:

多和妹子聊天, 有益身心健康!!!

Cannot load JDBC driver class 'com.mysql.jdbc.Driver '的更多相关文章

  1. Could not load db driver class: com.mysql.jdbc.Driver解决方法

    14/03/26 22:43:24 ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.RuntimeException: Could ...

  2. Oozie时出现org.apache.oozie.service.ServiceException: E0103: Could not load service classes, Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

    不多说,直接上干货! 问题详情 查看你的$OOZIE_HOME/logs 我的是/home/hadoop/app/oozie-4.1.0-cdh5.5.4/logs/oozie.log文件 [hado ...

  3. Failed to load driver class com.mysql.jdbc.Driver from HikariConfig class classloader sun.misc.Launcher$AppClassLoader@18b4aac2

    1.错误日志 Failed to load driver class com.mysql.jdbc.Driver from HikariConfig class classloader sun.mis ...

  4. 错误:“Cannot load JDBC driver class 'com.mysql.jdbc.Driver”的解决方法

    “Cannot load JDBC driver class 'com.mysql.jdbc.Driver ” 表示没有JDBC连接MySql的驱动包,因此需要手动添加驱动包到WEB-INF目录下的l ...

  5. Cannot load JDBC driver class 'com.mysql.jdbc.Driver解决方法

    “Cannot load JDBC driver class 'com.mysql.jdbc.Driver ” 表示没有JDBC连接MySql的驱动包,因此需要手动添加驱动包到WEB-INF目录下的l ...

  6. JDBC Request :Cannot load JDBC driver class 'com.mysql.jdbc.Driver'解决办法

    在Jmeter中run JDBC Request时,收到了Cannot load JDBC driver class 'com.mysql.jdbc.Driver',在网上搜了一些办法,结合自己的实际 ...

  7. Cannot load driver class: com.mysql.jdbc.Driver

    mysql-connector-java提供了mysql驱动等类库,此处必须引入此依赖,否则将会提示: Cannot load driver class: com.mysql.jdbc.Driver等 ...

  8. mySql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver

    Mysql版本的相关问题:com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver 1. 在使用mysql时,控制台日志报错如下: Loading class `c ...

  9. 报错:Sqoop2 Error message: Class not found JDBC Driver Class: com.mysql.jdbc.Driver

    报错背景: CDH安装完成Sqoop2的组建后进行创建link的操作. 报错现象: There are issues with entered data, please revise your inp ...

随机推荐

  1. HttpWebRequest用法实例

    [HttpPost] public ActionResult Setmobile() { string text = "<?xml version='1.0' encoding='UT ...

  2. spring学习六----------Bean的配置之Aware接口

    © 版权声明:本文为博主原创文章,转载请注明出处 Aware Spring提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应的资源 通过Aware接口,可以对S ...

  3. canvas drawImage方法不显示图片的解决方案

    先复习一下用法: context.drawImage(img,sx,sy,swidth,sheight,x,y,width,height); 各个参数说明: 参数 描述 img 规定要使用的图像.画布 ...

  4. 数字证书中keytool命令使用说明

    这个命令一般在JDK\jre\lib\security\目录下操作 keytool常用命令 -alias       产生别名 -keystore    指定密钥库的名称(就像数据库一样的证书库,可以 ...

  5. 关于HDFS NFS3的配置

    1.在core-site.xml中配置 <property> <name>hadoop.proxyuser.root.groups</name> <value ...

  6. Oracle的循环和Corsor

    这两天啊有一个心的业务,是须要假设我批量改动数据的话,那么还有一张表的数据也须要改动.也是多条的改动,发现这个问题的时候.自然而然的想到了触发器,可是曾经都是简单的单条语句的跟新,没有过整个表的去做一 ...

  7. windows 10 python 2.7和python3.6共存解决方法和pip安装

    一.首先去python官网将两个版本下载并安装: 然后进入windows的环境变量,检查下面4个变量: 1.C:\Python272.C:\Python27\Scripts3.D:\software\ ...

  8. [nio]dawn的基本概念

    1.dawn是单线程的: 为什么单线程?现实中非常多程序都是单线程的.比方redis,memcache,nodejs.mmorpgserver..... . 採用单线程有两大优点,首先,不须要使用锁, ...

  9. 【BZOJ2626】JZPFAR kd-tree+堆

    [BZOJ2626]JZPFAR Description 平面上有n个点.现在有m次询问,每次给定一个点(px, py)和一个整数k,输出n个点中离(px, py)的距离第k大的点的标号.如果有两个( ...

  10. EasyPlayer windows RTSP播放器OCX插件使用说明

    鉴于大家对于EasyPlayer插件的使用还不太熟悉,特此写一篇插件的使用文档,供大家参考:EasyPlayer插件有两种,一种是基于IE的ActiveX控件,一种是基于FireFox(也支持多浏览器 ...