在将SSM框架整合(Sping,SpringMVC,Mybatis)的时候遇到了不少的错误,不过出现错误解决错误是好事!如此才会精进。也记不住很多错误了,记住的就放这里保存一下,以备下次排查时用。本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
报错1:Error instantiating interface cn.api04007.dao.CategoryMapper with invalid types () or values (). 本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
在运行junit单元测试的时候,报错Error instantiating interface cn.api04007.dao.CategoryMapper with invalid types () or values (). 即在对interface进行init的时候有无效的类或值。完整报错如下:Caused by: org.apache.ibatis.reflection.ReflectionException: Error instantiating interface cn.api04007.dao.CategoryMapper with invalid types () or values (). Cause: java.lang.NoSuchMethodException: cn.api04007.dao.CategoryMapper.<init>() Caused by: java.lang.NoSuchMethodException: cn.api04007.dao.CategoryMapper.<init>()本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
这里错误的地方就在CategoryMapper.xml的select语句上resultType,这个resultType应该对应一个pojo实体类,而不是对应一个Interface,因为interface无法init初始化,必须是一个实体类。所以更改resultType为pojo下的类即可。本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
报错2:Caused by: java.sql.SQLException: null, message from server: "Host '10.146.8.*.*' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'"。本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
完整报错:Caused by: java.sql.SQLException: null, message from server: "Host '10.146.8.*.*'' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'" at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
看提示这个错误是mysql报的,信息里明确写了message from server:,这和mysql服务器的配置有关。Mysql有一项配置max_connect_errors,其是控制同一个IP在短时间内产生太多中断的数据库连接,超过了max_connect_errors的最大值的话就会导致这个错误即被blocked阻止。可以在mysql服务器上执行 flush hosts;清空一下这些错误记录,另外增加一下这个配置项的值。如下:本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
mysql> SHOW GLOBAL VARIABLES LIKE "%max_connect_errors%"; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 3 | +--------------------+-------+ 1 row in set (0.00 sec) mysql> flush hosts; Query OK, 0 rows affected (0.00 sec)本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
为什么会报这个错?我在经过几次测试、排查后发现了其中的原因。我这里使用的是c3p0连接池,我在配置中设置了maxPoolSize和minPoolSize这个最多和最少的连接数。其中minPoolSize这个选项就是项目运行时向mysql服务器请求的连接数,如果我的账号密码错了,则在瞬间就会让max_connect_errors的值增加达到minPoolSize,超过了max_connect_errors的配置阈值,所以报错。本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
报错3:Caused by: java.sql.SQLException: Access denied for user 'Administrator'@'*.*.*.*' (using password: YES);Caused by: java.sql.SQLException: Access denied for user 'Host '@'*.*.*.*' (using password: YES)本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
我在db.properties中明明配置了账户名和密码,但我在项目运行报错中发现了Administrator和Host 这类账户,觉得很奇怪,这怎么也不应该啊。通过测试我推测在spring配置dataSource(使用c3p0类com.mchange.v2.c3p0.ComboPooledDataSource)的时候,property中的name的value,如果通过${username}来取的话,它不一定能取到db.properties中写的username。可能有其它的地方和这个名字重名了。把db.properties中的key统一改成*****.username增加一级(引用的时候也同样),或者改成其它一些冷名的名字就能正确取到值。本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
而这个取账号的错误也正是导致上面报错2的出现。不然即便是最少打开10个连接,但因为都能正常连接,也不会达到max_connect_errors的阈值。本文地址:http://www.04007.cn/article/899.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/899.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |