Mysql 8.0使用Mybatis连接数据库会遇到的问题
<!-- mybatis主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="mysql">
<!-- 配置mysql环境 -->
<environment id="mysql">
<!-- 配置事务类型 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
当我使用Mysql5.X版本的Mybatis配置文件直接进行配置并运行程序时,控制台直接给我返回了这样一个错误:
### Error querying database. Cause: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
这段错误的重点在于Communications link failure
,也就是通信线路故障。当出现这种错误则代表Mybatis根本没有连接到数据库,因此我检查了账号密码并使用第三方数据库管理软件尝试连接数据库,结果是正常的,数据库可以被正常连接,所以数据库本身的问题被排除。
在查阅资料以后,我在连接url
地址的最末尾加入useSSL=true&allowPublicKeyRetrieval=true&serverTimezone=UTC
,结果发现&
这个符号居然不合法。其实是这样的,&
符号并不被xml文件支持,因此我们需要将其替换为&
。
再次运行,成功连接。
为什么加入上述代码后就能正常执行呢?重点在于useSSL=true
这个部分。
useSSL
这个参数有一个很重要的作用就是在连接Mysql时进行验证,当你的JDBC版本与当前需要连接的Mysql服务器一致时,则不需要开启;而当你的JDBC与当前Mysql服务器不一致,及不兼容时,加入该参数则可以成功连接数据库。