项目场景:

使用 Spring SpringMVC Mybatis 进行整合SSM的过程中,声明一个声明式事务的查询服务,发现无法使用。

@Service
public class EmpServiceImpl implements EmpService {@Autowiredprivate EmpMapper empMapper;@Transactional@Overridepublic List<Emp> selectAll() {return empMapper.selectAll();}
}
    <dependencies><!-- SpringMVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.15</version></dependency><!-- Spring 持久化层所需依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><version>5.3.15</version></dependency><!-- 日志 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.10</version></dependency><!-- ServletAPI --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><!-- Spring5和Thymeleaf整合包 --><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.14.RELEASE</version></dependency><!-- Mybatis核心 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency><!-- 数据源 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.9</version></dependency><!-- junit5 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.2</version><scope>test</scope></dependency><!-- Spring 的测试功能 --><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.3.15</version></dependency><!-- Mybatis 和 Spring 的整合包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.7</version></dependency></dependencies>

DEBUG日志

[13:18:32.310] [ERROR] [Druid-ConnectionPool-Create-992196964] [com.alibaba.druid.pool.DruidDataSource] [create connection error, url: jdbc:mysql://localhost:3306/mybatis_exercise?serverTimezone=Asia/Shanghai&amp, errorCode 1251, state 08004]
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL clientat sun.reflect.GeneratedConstructorAccessor64.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:403)at com.mysql.jdbc.Util.getInstance(Util.java:378)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3378)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3310)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3810)at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1272)at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1992)at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:720)at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)at sun.reflect.GeneratedConstructorAccessor62.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:403)at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:293)at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1464)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1529)at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2109)
[13:18:32.312] [ERROR] [Druid-ConnectionPool-Create-992196964] [com.alibaba.druid.pool.DruidDataSource] [create connection error, url: jdbc:mysql://localhost:3306/mybatis_exercise?serverTimezone=Asia/Shanghai&amp, errorCode 1251, state 08004]
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL clientat sun.reflect.GeneratedConstructorAccessor64.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:403)at com.mysql.jdbc.Util.getInstance(Util.java:378)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3378)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3310)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3810)at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1272)at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1992)at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:720)at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)at sun.reflect.GeneratedConstructorAccessor62.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:403)at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:293)at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1464)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1529)at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2109)
[13:18:32.313] [ERROR] [Druid-ConnectionPool-Create-992196964] [com.alibaba.druid.pool.DruidDataSource] [create connection error, url: jdbc:mysql://localhost:3306/mybatis_exercise?serverTimezone=Asia/Shanghai&amp, errorCode 1251, state 08004]
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL clientat sun.reflect.GeneratedConstructorAccessor64.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:403)at com.mysql.jdbc.Util.getInstance(Util.java:378)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:985)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3378)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3310)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:910)at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:3810)at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1272)at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1992)at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:720)at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46)at sun.reflect.GeneratedConstructorAccessor62.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:403)at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:293)at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:283)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1464)at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1529)at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2109)

问题描述:

  1. 根据网上的debug,发现很可能是mysql版本和mysql-connect-java依赖版本不对应,但是我使用的是mysql版本是8.0+
       <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency>

事实上和这个没有关系
2. 使用Junit编写了一个测试类Test,发现能够查询到信息,这事情就变得很迷惑了。
3. 看了测试类的日志后,发现了了是jdbc.properties的driver没有配置好

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
[13:24:50.787] [WARN ] [main] [com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker] [Cannot resolve com.mysq.jdbc.Connection.ping method.  Will use 'SELECT 1' instead.]

只要在 jdbc.properties 中将 com.mysql.jdbc.Driver 改为com.mysql.cj.jdbc.Driver即可


原因分析:

Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
[13:24:50.787] [WARN ] [main] [com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker] [Cannot resolve com.mysq.jdbc.Connection.ping method.  Will use 'SELECT 1' instead.]

解决方案:

只要在 jdbc.properties 中将 com.mysql.jdbc.Driver 改为com.mysql.cj.jdbc.Driver即可

【DEBUG】com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support相关推荐

  1. Mysql连接问题:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException

    com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establish ...

  2. Maven项目中:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create conn

    报错信息 详细信息 ERROR [Druid-ConnectionPool-Create-2074541388] - create connection error, url:jdbc:mysql:/ ...

  3. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to

    困扰了我两天的异常 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create con ...

  4. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法

    在使用MySQL驱动进行JDBC时候出现了以下异常 Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQL ...

  5. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieval is not?

    问题 :连接MySQL数据库时抛出异常信息: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public ...

  6. 启动项目出现com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法

    启动SpringBoot项目失败mysql连接错误 2020-03-21 20:16:25.193  INFO 8204 --- [           main] com.cnadmart.ApiA ...

  7. MySQL报错:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException

    一.原因分析 原因1:环境配置方面 MySQL版本与驱动版本不匹配.如:MySQL8.0 (8.0版本)搭配 mysql-connector-java-5.1.37.jar(5.0版本) 原因2:代码 ...

  8. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错

    -- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...

  9. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'test'

    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'test' com.mysql.jdbc.ex ...

最新文章

  1. 漫画:小白为了面试如何刷题?(呕心沥血算法指导篇)
  2. CNS级别的插图你也可以实现,只需2天
  3. SpiderData 2019年2月13日 DApp数据排行榜
  4. 工业机器人几个自由度_取件冲压上下料机械手和六自由度工业机器人805A
  5. 基于机器学习的捡球机器人设计与实现(探索)第1篇——树莓派系统的安装与配置(20190106)
  6. android自定义minitype,MiniType部类以及扩展名
  7. iPhone放大模式详解
  8. 字符串系统函数strstr strrchr [5.3有版本不同]
  9. 车牌识别EasyPR(4)——字符识别MSER
  10. 从小编程,到架构师,我们应该具备什么
  11. java基本变量的堆栈_JAVA经验谈:尽可能使用堆栈变量
  12. 复旦MBAer聊“进博”:希望已至,寻路未来!
  13. 攻防世界 Reverse logmein
  14. a标签使用方法和跳转方式
  15. 显示一个立方体的斜二测图(用数组存放正方体的各顶点坐标)
  16. 8.9 HITTING SET problem
  17. 万恶的NPE如何避免,几种你必须知道的方案!!!
  18. openwrt - 入门( uHTTPd, opkg, uci, luci, mtd等)
  19. 《高校bbs或者科研论坛》
  20. 深度挖掘:FIashGet下载隐藏链接[转]

热门文章

  1. 微商引流海报怎么设置?什么样的海报更容易传播
  2. js html 图片贴纸,使用Sticker.js实现贴纸效果
  3. Cyberbot隐私政策
  4. java源码-String
  5. 怎么看mysql执行计划
  6. A1、A2、A3、A4的纸尺寸分别是多少?
  7. vue-vue2和vue3的diff算法
  8. 通过高德地图API实现浏览器定位[以及提高定位精度、获取详细位置信息]
  9. 万字长文分析AQS原理以及应用
  10. 【分析Windows 8系统三种安装方式的利弊】