Could not get JDBC connection
想学习下javaweb,手头有2017年有活动的时候买的一本书,还是全彩的,应该很适合我这种菜鸟技术渣。
只可惜照着书搭建了一套web环境,代码和db脚本都是拷贝的光盘里的,也反复检查了数据库的连接情况,navicat可以正常连,涉及到的两个数据库配置文件里面的url、端口、密码应该都是对的,反复折腾了一晚上没搞定,临了百度一顿乱搜,看到一个帖子()里面提到的一句话(最后发现因为我使用的是mysql8.0,mysql-connector-java-5.1.28-bin.jar的驱动需要升级,于是我升级到了mysql-connector-java-8.0.11-bin.jar.),感觉有戏,因为我本地装的mysql也是8的,只是已经2点多了,吃不消赶紧睡了,第二天再看吧。报错日志:
### cause: org.springframework.jdbc.cannotgetjdbcconnectionexception: could not get jdbc connection; nested exception is com.alibaba.druid.pool.getconnectiontimeoutexception: wait millis 6002, active 0, maxactive 20] with root cause java.lang.nullpointerexception at com.mysql.jdbc.connectionimpl.getservercharacterencoding(connectionimpl.java:3307) at com.mysql.jdbc..sendconnectionattributes(mysqlio.java:1985) at com.mysql.jdbc.mysqlio.proceedhandshakewithpluggableauthentication(mysqlio.java:1911) at com.mysql.jdbc.mysqlio.dohandshake(mysqlio.java:1288) at com.mysql.jdbc.connectionimpl.coreconnect(connectionimpl.java:2506) at com.mysql.jdbc.connectionimpl.connectonetryonly(connectionimpl.java:2539) at com.mysql.jdbc.connectionimpl.createnewio(connectionimpl.java:2321) at com.mysql.jdbc.connectionimpl.<init>(connectionimpl.java:832) at com.mysql.jdbc.jdbc4connection.<init>(jdbc4connection.java:46) at sun.reflect.generatedconstructoraccessor32.newinstance(unknown source) at sun.reflect.delegatingconstructoraccessorimpl.newinstance(delegatingconstructoraccessorimpl.java:45) at java.lang.reflect.constructor.newinstance(constructor.java:423) at com.mysql.jdbc.util.handlenewinstance(util.java:409) at com.mysql.jdbc.connectionimpl.getinstance(connectionimpl.java:417) at com.mysql.jdbc.nonregisteringdriver.connect(nonregisteringdriver.java:344) at com.alibaba.druid.pool.druidabstractdatasource.createphysicalconnection(druidabstractdatasource.java:1408) at com.alibaba.druid.pool.druidabstractdatasource.createphysicalconnection(druidabstractdatasource.java:1464) at com.alibaba.druid.pool.druiddatasource$createconnectionthread.run(druiddatasource.java:1969)
第二天了,晚上。开始下配套mysql客户端,打开官网发现有点小慢,所以就同时继续百度搜,发现csdn的都要虚拟币什么的,又不想注册,放弃。
继续搜突然发现个不错的地址http://ftp.ntu.edu.tw/mysql/downloads/connector-j/ 里面各种mysql-connector版本,看地址是宝岛某大学的ftp服务器,就下了个配套的mysql-connector-java-8.0.15.zip,解压了以后放到我工程的对应目录下,其实一开始也不知道要放到哪个目录,就mysql-connector*搜了下才找到旧包路径是webcontent/web-inf/lib/mysql-connector-java-5.1.30.jar,直接改成mysql-connector-java-5.1.30.jar.bak,把mysql-connector-java-8.0.15.jar放过去。
完了还看到说要改driver和url的,mysql8需要的,只好改啊,发现相关的有两个文件jdbc.properties和spring-pz-shiro.xml(登录鉴权模块)
jdbc.properties: driver=com.mysql.jdbc.driver url=jdbc:mysql://127.0.0.1:3306/mydb => driver=com.mysql.cj.jdbc.driver url=jdbc:mysql://127.0.0.1:3306/mydb?usessl=false&servertimezone=utc
sprint-pz-shiro.xml:
<bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="com.mysql.jdbc.driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb" /> </bean> => <bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="com.mysql.cj.jdbc.driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?usessl=false&servertimezone=utc" /> </bean>
改完了跑一把,又报个错误 “对实体 "servertimezone" 的引用必须以 ';' 分隔符结尾。”,继续百度,参考里面有一句话:
在 xml 中 &符号是作为实体字符形式存在的,参考 ,得知要把&改成&
<bean id="datasource" class="org.springframework.jdbc.datasource.drivermanagerdatasource"> <property name="driverclassname" value="com.mysql.cj.jdbc.driver" /> <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?usessl=false&servertimezone=utc" /> </bean>
然后页面就能正常打开不报错了!
小结:jdbc connection问题
1、检查数据库连接情况;
2、检查数据源配置情况,比如这里的jdbc.properties和spring-pz-shiro.xml
3、检查数据库客户端服务器版本配套情况,本案例中虽然检查了步骤1和2觉得都正常,最后发现应该说版本不匹配导致,还是要回头改步骤2的配置。
2019-04-12 23:50:05 第一遍随笔,开启我的畜奴农猿狮之路,打破世俗,突破自我。
下一篇: 原生Ajax详解
推荐阅读
-
Docker Centos7.2 docker Failed to get D-Bus connection
-
mysql-Myeclipse jdbc 建立连接DriverManager前面要加(Connection)?
-
Myeclipse链接Oracle等数据库时lo exception: The Network Adapter could not establish the connection
-
android使用url connection示例(get和post数据获取返回数据)
-
java执行-cp报错 error: could not load JDBC driver
-
【⭐】Java—Spring-—数据库操作—使用内置连接池,报读取不到驱动错误。Could not load JDBC driver class。
-
关于JDBC中Connection的使用的几个details
-
Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
-
hibernate异常找不到get方法org.hibernate.PropertyNotFoundException: Could not find a get
-
oracle sql developer 出现 : 适配器无法建立连接问题解决方案 The Network Adapter could not establish the connection