【JavaWeb学习】关于mysql-connector-j版本过高引起的问题
前言,mysql版本对应的mysqlconnector,分为两种,一种是高版本,比如mysql-connector-j-8.0.32.jar;另一种是低版本,比如mysql-connector-java-5.1.49。
一、运行环境
mysql5.*.+ JDK1.8 + apache-tomcat-8.5.100
二、依赖包
2025/10/19 08:58 78,492 jackson-annotations-2.17.2.jar
2025/10/19 08:58 581,927 jackson-core-2.17.2.jar
2025/10/19 08:58 1,649,454 jackson-databind-2.17.2.jar
2025/10/19 08:58 95,505 javax.servlet-api-4.0.1.jar
2025/10/19 08:58 282,793 logback-classic-1.4.11.jar
2025/10/19 08:58 1,808,512 mybatis-3.5.15.jar
2020/04/20 05:10 1,006,904 mysql-connector-java-5.1.49.jar
2025/10/19 09:01 28,823 spring-plugin-core-2.0.0.RELEASE.jar
2025/10/19 09:01 9,877 spring-plugin-metadata-2.0.0.RELEASE.jar
2025/10/19 09:01 116,887 springfox-core-2.10.5.jar
2025/10/19 09:01 84,780 springfox-schema-2.10.5.jar
2025/10/19 09:01 50,086 springfox-spi-2.10.5.jar
2025/10/19 09:01 2,717,820 springfox-swagger-ui-2.10.5.jar
2025/10/19 09:01 69,489 springfox-swagger2-2.10.5.jar
2025/10/19 09:01 21,192 swagger-annotations-1.6.14.jar
2025/10/19 09:02 121,979 swagger-core-1.6.14.jar
2025/10/19 09:02 157,760 swagger-models-1.6.14.jar
mysql-connector-java-5.1.49.jar ,下载地址:https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.49.zip
其他的jar包运行下载地址可见上一篇博客文章
【JavaWeb学习】myabtis.xml一次性加载mapper相关的文件
反思:
当使用高版本连接低版本的mysql的时候,比如mysql-connector-j-8.0.32.jar
连接 mysql5.*
的时候,出现,
HTTP状态 500 - 内部服务器错误
类型 异常报告描述 服务器遇到一个意外的情况,阻止它完成请求。例外情况org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is required
### The error may exist in com/example/api/dao/UserMapper.xml
### The error may involve com.example.api.dao.UserMapper.selectById
### The error occurred while executing a query
### Cause: java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is requiredorg.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:156)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:87)org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)com.sun.proxy.$Proxy19.selectById(Unknown Source)com.example.api.service.manageService.UserService.get(UserService.java:30)com.example.api.controller.manageController.UserController.doGet(UserController.java:41)javax.servlet.http.HttpServlet.service(HttpServlet.java:489)javax.servlet.http.HttpServlet.service(HttpServlet.java:583)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
根本原因。java.sql.SQLNonTransientConnectionException: CLIENT_PLUGIN_AUTH is requiredcom.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:110)com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:79)com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:824)com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237)com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)java.sql.DriverManager.getConnection(DriverManager.java:664)java.sql.DriverManager.getConnection(DriverManager.java:208)org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:228)org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:223)org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:96)org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:452)org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:100)org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:145)org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:67)org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348)org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89)org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64)org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336)org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158)org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110)org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:87)org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)com.sun.proxy.$Proxy19.selectById(Unknown Source)com.example.api.service.manageService.UserService.get(UserService.java:30)com.example.api.controller.manageController.UserController.doGet(UserController.java:41)javax.servlet.http.HttpServlet.service(HttpServlet.java:489)javax.servlet.http.HttpServlet.service(HttpServlet.java:583)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
根本原因。com.mysql.cj.exceptions.UnableToConnectException: CLIENT_PLUGIN_AUTH is requiredsun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)java.lang.reflect.Constructor.newInstance(Constructor.java:422)com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:85)com.mysql.cj.protocol.a.NativeAuthenticationProvider.connect(NativeAuthenticationProvider.java:153)com.mysql.cj.protocol.a.NativeProtocol.connect(NativeProtocol.java:1429)com.mysql.cj.NativeSession.connect(NativeSession.java:133)com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:944)com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:814)com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:237)com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)java.sql.DriverManager.getConnection(DriverManager.java:664)java.sql.DriverManager.getConnection(DriverManager.java:208)org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:228)org.apache.ibatis.datasource.unpooled.UnpooledDataSource.doGetConnection(UnpooledDataSource.java:223)org.apache.ibatis.datasource.unpooled.UnpooledDataSource.getConnection(UnpooledDataSource.java:96)org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:452)org.apache.ibatis.datasource.pooled.PooledDataSource.getConnection(PooledDataSource.java:100)org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:145)org.apache.ibatis.transaction.jdbc.JdbcTransaction.getConnection(JdbcTransaction.java:67)org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:348)org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:89)org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:64)org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:336)org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:158)org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:110)org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:90)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:154)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:142)org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:75)org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:87)org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141)org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)com.sun.proxy.$Proxy19.selectById(Unknown Source)com.example.api.service.manageService.UserService.get(UserService.java:30)com.example.api.controller.manageController.UserController.doGet(UserController.java:41)javax.servlet.http.HttpServlet.service(HttpServlet.java:489)javax.servlet.http.HttpServlet.service(HttpServlet.java:583)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看
这个时候就可以更换低版本的mysql-connnect就可以运行了。
{"id": 1,"name": "xiaohua","avatar": "https://www.keaitupian.cn/cjpic/frombd/0/253/3740004554/2000361416.jpg","description": "I can doing homework well"
}