使用druid连接池报错:java.lang.NullPointerException com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1105)
1. 今天在 maven 项目中按照往常使用 druid 连接池,在注册界面点击注册后发现报错:
2. 于是打开 registUserServlet, 发现报错信息如下:
3. 打开自己的 druid.properties, 配置如下:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///travel username=root password=root initialSize=5 maxActive=10 maxWait=3000
4. 跟自己之前的配置进行了一下对比,发现 url 少了一部分,于是添加上去:
url=jdbc:mysql:///travel?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
5. 仍然报错,接着看到网上的方法:
dataSource.driverClassName=com.mysql.cj.jdbc.Driver
dataSource.validationQuery=select 1
dataSource.testOnBorrow=true
dataSource.testWhileIdle=true
于是在我的 drui.properties 加入这些参数:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///travel?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
validationQuery=select 1
testOnBorrow=true
testWhileIdle=true
6. 再次尝试发现仍然是相同的错误,于是去查看是否是自己的依赖 jar 包有错, 不知道是不是 mysql8.0 要匹配相应版本的 mysql-connector-java.jar, 于是将 5.6.1 换成了 8.0.15 版本的,检查之后发现没有错误。
7. 因为之前一直搞不明白 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别,于是去网上查了一下:
com.mysql.jdbc.Driver 是 mysql-connector-java 5 及 5 之前的,
com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 及 6 之后的的。
这里我的版本是 5 之后,所以加入了 cj。问题解决了!!!根本原因就是 mysql8.0 与 mysql-connector-java.jar 版本一定要匹配!!!务必牢记!