错误信息: 一个或多个listeners启动失败、但在Web应用程序停止时无法注销它、 为防止内存泄漏,JDBC驱动程序已被强制取消注册、至少有一个JAR被扫描用于TLD但尚未包含TLD…
上面的报错信息,几乎会不是出现这个就是那个,但是如果看这个你就误入歧途了。首先我们明确这是谁报的错?
1.找到真正出错的地方
上面的错误是谁报的?这里以idea2020.1为例,在用tomcat启动maven构建的web项目时,报错的。但是控制台有三小块,分别是server、tomcat loclhost log、tomcat catalina log,我们看截图
上面的错是 tomcat catalina log 输出的,也就是错误出现在tomacat容器本身。我们的tomcat如果自己不去乱改,一般不会有问题,顶多是版本不兼容问题,这个很容易判断,是不是tomcat本身的问题。一般不是哈~~
说到这里,我们自然会想到第二块tomcat localhost log 这里有什么呢?tomcat localhost log输出的是,本地tomcat容器中的web程序的报错,这里的错才是真正的错误,解决这里的错误才能真正解决问题。点击可以看到是不是也报错?这就对了,(哈哈,一般这里报错,tomcat本身多半会受影响而报错。)
2.确定真正报错原因后,解决问题就so easy !
我此次tomcat localhost log 的报错信息如下,我只复制了最根本的原因:Access denied for user ‘root’@‘OS-20191119PYDJ’ (using password),其实前面还有啥 “Error creating bean with name ‘sqlSessionFactory’ defined in class path reso”,这不是根本错误,别想着改spring-context配置文件,没用。解决根上的问题才一针见血。
这个错误其实就是无权访问数据库,是数据库权限的问题。
然后我就猛地想起,我之前重装了本地的数据库。创建数据库用户时候,授权都是仅能本地访问,远程不行。而我的web程序中访问数据库的jdbc.url 是局域网ip,类似于192.168.6.28:3306这种,这种数据库会默认为远程连接,但是我是没有远程访问的权限的。好啦,至此,问题清清楚楚
3.修改root用户权限。
登录本地数据库服务器,进去mysql数据库,执行 select user,host from user;可以看看自己创建的数据库用户
可以看到,root只有本地访问权限。现在授权远程访问权限即可,grant all privileges on . to ‘root’@’%’ identified by ‘root’ with grant option;然后刷新权限 flush privileges;
4.再次启动tamcat的web应用,爽!三天都没解决的问题,真是靠自己解决了~~~~
本帖子并不能解决所有问题,但是本帖子告诉了你问题真正的原因怎么找,授人以鱼不如授人以渔!