我们先来看看出现的异常信息,如下。
org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 2,594 milliseconds ago. The last packet sent successfully to the server was 2,580 milliseconds ago. ### The error may exist in com/qijian/dao/UserMapper.xml ### The error may involve com.qijian.dao.UserDao.getUserList ### The error occurred while executing a query ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet successfully received from the server was 2,594 milliseconds ago. The last packet sent successfully to the server was 2,580 milliseconds ago.
从错误信息中我们可以看到是查询数据库出现错误,以至于我一度以为是我的idea配置数据库出现错误,反复检查了几遍发现没有什么问题。后来百度了一下找到了一篇文章原文跟着改了一下发现问题的确解决了。如下
原:
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"
改:
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
问题解决输出了结果:
User{id=1, name='qijian', pwd='123'} User{id=2, name='Tom', pwd='123'} User{id=3, name='lisi', pwd='123'}
但是还是不太明白:
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。SSL为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密(Encryption)的技术,可确保数据在网络上的传输过程中不会被截取及窃听。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。
MySQL5.7以及MySQL5.7以上的版本需要配置ssl证书,并且MySQL5.7默认是开启SSL连接,如果强制用户使用SSL连接,那么应用程序的配置也需要明确指定SSL相关参数,否则程序会报错。因为之前用的是MySQL5.7以下的版本所以完全忽略了 。