java spring 等启动项目时的异常 或 程序异常的解决思路
今天搭建ssm项目的时候,因为pagehelper的一个jar包没有导入idea的web项目下的lib目录中,异常报错找不到pagehelper,这个问题在出异常的时候疯狂crash,让人心情十分不舒服、沮丧、急躁、有脾气,https://www.zhihu.com/question/22924738/answer/23103484 这里是深入解除这种状态,并解决这种程序crash时出现负面情绪的方法和解决程序crash的方法。
不过今天倒是让我的耐心得到了很大的提升,同时让我对解决这类启动项目时的配置文件或jar包导致的异常有了一点的解决思路,同时对普通的异常也有了更好的解决思路。
注注注注注注注注注注意: 不要只看console,异常可不只是出现在console呐,有时候会出现在tomcat log和tomcat console这两个窗口里,这三个输出窗口都是挨着的,如果在console里没出现异常,那就去其他两个看看,一般真出问题了会抛出异常的(当然,我说的是idea)。
普通的异常可以用debug快速定位
启动项目时的异常解决思路:
首先定位根本异常在哪,也就是第一个出异常的位置,因为它会导致后面相关依赖的组件出现一系列的异常,所以在
出现异常的1~3 行进行定位,通常只需要看异常出现后的第一行的末尾就行了,这个就是根异常,只要解决这个异常,一般情况下所有的异常都会解决。
比如这次的 pagehelper导致的异常
因为我的异常信息已经没了,所以copy一份网上的别人的异常作为讲解示例:
示例来源:https://github.com/pagehelper/Mybatis-PageHelper/issues/20、
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in file [E:\JAVA\eclipse2017workplace\vcgo-manager\vcgo-manager-service\target\classes\spring\applicationContext-dao.xml]: Invocation of init method failed; nested exception is org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [mybatis/SqlMapConfig.xml]; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:753)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.core.NestedIOException: Failed to parse config resource: class path resource [mybatis/SqlMapConfig.xml]; nested exception is org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:434)
at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:340)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 21 more
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:109)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:92)
at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:428)
... 24 more
Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:103)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.pluginElement(XMLConfigBuilder.java:142)
at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:100)
... 26 more
Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'. Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:117)
at org.apache.ibatis.builder.BaseBuilder.resolveAlias(BaseBuilder.java:130)
at org.apache.ibatis.builder.BaseBuilder.resolveClass(BaseBuilder.java:101)
... 28 more
Caused by: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:190)
at org.apache.ibatis.io.ClassLoaderWrapper.classForName(ClassLoaderWrapper.java:89)
at org.apache.ibatis.io.Resources.classForName(Resources.java:256)
at org.apache.ibatis.type.TypeAliasRegistry.resolveAlias(TypeAliasRegistry.java:113)
... 30 more
看这里第一行的末尾:
Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor
从这里就可以看出来,是因为找不到 class: com.github.pagehelper.PageInterceptor 导致的,因为找不到这个,进而使前面一系列的使用到的组件出现异常,
比如我自己的前面就出现了 mapper依赖注入失败的异常 抛出 Error creating bean with name mapper,导致我一下午都是各种搜索异常,其实这样根本就是没有思路的乱搞,
总之,一般情况下一定要先找到根异常(那个最根本原因的异常,一般在第一行的末尾),找到那个异常之后就要看那个异常是什么,分析因为这个异常导致了哪些一系列的异常,
然后再去搜索这个异常的原因是什么,像这次pagehelper找不到,我就应该直接去看pagehelper的issue,看看有没有类似的问题,或者google:github issue xxxx,这种用关键字
来定位问题的方法,然后pagehelper的作者回答了原因就是因为找不到jar包,进而让我想到了idea下的 maven web应用必须单独导入jar包到项目的 /WEB-INF/lib目录下,所以put一下就能正常运行了
总之遇到异常,不要慌,要冷静的一步一步排查,查找错误的根本原因,
对于这种配置类的异常很多可能是路径问题,比如很多路径都必须使用 classpath: xxx,
还有就是idea下的maven web项目 必须单独导入jar包到项目的 /WEB-INF/lib目录下 put就行了,所以以后每次我要导入新的maven仓库jar包的话,我都必须put一次,保证jar包在lib下
然后就是定位异常必须定位到根异常(通常是最开始的那个异常的第一行的末尾),只要解决这个异常,基本上相关所有的这条运行线路就通了
===============
python的根异常跟java的位置相反,是在trash的最后一行开始
===============
下面是那篇知乎文章的备份:
作者:吴涛
链接:https://www.zhihu.com/question/22924738/answer/23103484
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。程序崩溃时,有些人一语不发眉头紧皱,有些人咬着指甲前后摇晃,有些人喃喃自语唉声叹气,有些人叉手望天若有所思,还有些人……特别烦躁想砸键盘 :)
在大多数人的编程生涯里面,「烦躁」都是会在某个阶段出现的正常情绪。但「想砸键盘」则是因为你的烦躁感需要通过破坏物品才能得到宣泄,而这是性格的一部分,跟你的成长经历有关,跟写程序无关。如果你觉得这是个问题,请咨询心理医师,如果不觉得是个问题,它就不是个问题,只要你不要像那个玩不到 Unreal 就真的砸键盘的德国小孩一样狂暴。
那么「烦躁」从何而来?能写好程序的人基本上都是 control freak,而 control freak 不能容忍局面不在自己的掌控之中,具体来说就是 crash 了却不知道为什么。所以烦躁基本上来自于「因为不知所措而带来的挫折感」,而要减少失控的挫折感的法门,就是全面而细致地了解编程的各个方方面面:要了解你所选择的技术——包括它的设计哲学、它的历史、它的标准、它的实现、它的社区、它的代码库、它的发布方法、它的包管理系统;还要熟悉你的编辑器,熟悉你的编译器,熟悉你的 REPL,熟悉你的 debugger,熟悉你的操作系统,熟悉你的硬件架构;乃至摸清楚你所书写程序需要解决的问题领域,进而去了解这一领域所处的行业、这一行业的现状、历史和未来走向。知道得越多,你就越不可能在程序崩溃的时候无所适从:大部分时候你会知道它为什么崩溃,而如果你不知道为什么,也对于怎样才能找到答案了然于心。到那个时候你就很少会因为程序崩溃而烦躁了。而到达那个境界之前,你可以用诸如「烦躁不会让我更快地思考,所以对于解决问题没有帮助」或者「感觉到烦躁说明我正在自己的 comfortable zone 之外,这是一种扩展,我必须与自己对抗」之类的想法来疏导情绪。当然我也没有到达上面描述的那个境界,每次感觉到烦躁的时候我就会想,每个人都是会孤独地死去的,何必呢。
java spring 等启动项目时的异常 或 程序异常的解决思路的更多相关文章
- Spring:启动项目时加载数据库数据(总结)
在项目中需要启动程序时,要将数据库的用户信息表加载到内存中,找到一下几种方式. 1.实现ApplicationListener接口,重写onApplicationEvent方法,可以在项目启动的时候执 ...
- SpringBoot启动项目时提示:Error:java: 读取***.jar时出错;
场景 在IDEA中新建SpringBoot项目后,修改了默认的Maven仓库和配置文件,然后在启动项目时提示: Error:java: 读取\org\assertj\assertj-core\3.11 ...
- SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在
场景 在IDEA中新建SpringBoot项目,后启动项目时提示: Error:(3, 32) java: 程序包org.springframework.boot不存在 实现 将pom.xml中par ...
- IDEA问题之“微服务启动项目时,不会加载Spring Boot到Services中”
1.启动项目时,不会加载Spring Boot到Services中 现象解析: 启动项目时 会在debug的位置加载项目 注:这里没有配图,因为问题已解决,未记录图,需往后遇到记录 解决方案: 需要在 ...
- vue-cli 启动项目时空白页面
vue-cli 启动项目时空白页面 在启动项目时 npm run serve / npm run dev 启动 vue 项目空白页:且终端及控制台都未报错 通过各种查阅发现在项目根目录中 vue-co ...
- 启动项目时出现java.io.EOFException异常。
错误: 2018-4-18 10:55:54 org.apache.catalina.session.StandardManager doLoad 严重: IOException while load ...
- IntelliJIdea 2016.2 使用 tomcat 8.5 调试spring的web项目时,bean被实例化两次导致timer和thread被启动了两遍的问题的解决
今天新搭建了一个spring的web项目,项目启动时会启动一个线程,线程里定时执行任务,另外还启动了一个定时器,每秒钟统计系统吞吐量等业务性能数据.但是调试的时候惊奇的发现定时器和线程均被启动了两次. ...
- 第三章 Maven构建 Java Spring Boot Web项目
3.1 认识Srping Boot Spring Boot是一个框架,是一种全新的编程规范,它的产生简化了对框架的使用,简化了Spring众多的框架中大量的繁琐的配置文件,所以说Spring Bo ...
- 启动项目时tomcat问题汇总
最近SVN上迁下来的新项目,在刚运行项目时tomcat就报错了.以前也经常遇到,没太引起注意,今天终于决定将这个问题好好总结一下. 首先 1.错误:An internal error occurred ...
随机推荐
- UITableView中cell点击的绚丽动画效果
UITableView中cell点击的绚丽动画效果 本人视频教程系类 iOS中CALayer的使用 效果图: 源码: YouXianMingCell.h 与 YouXianMingCell.m / ...
- [沫沫金]JavaWeb企业信息系统,增加操作记录、数据库记录
背景 系统出现数据莫名丢失,业务人员的反馈无法复现问题.纠结了很久,最终老板发话要记录操作,通过日志进行分析重现 环境 SSH框架 目标 1.记录访问了那个方法,使用的参数及返回的内容 2.记录新增. ...
- September 29th 2017 Week 39th Friday
Human life is ephemera, which makes it precious. 生命短暂,所以珍贵. Don't waste time on praying to the God. ...
- 面对对象程序设计_task2_C++视频教程
lessons about C++ 1月份的事情不该留到2月份来做,这几天看了几个地方的C++视频教程,不习惯于云课堂的话多等等,最终还是选择了慕课网上面的资源,也安下心来看了一些内容,下面附上课程详 ...
- 【Alpha】Daily Scrum Meeting
一 博客集合贴 11月15日 [Alpha]Daily Scrum Meeting——blog1 11月18日 [Alpha]Daily Scrum Meeting——blog2 11月19日 [Al ...
- Spring实战 MethodInvokingJobDetailFactoryBean使用与分析
定义一个Job类 public class OffsetsQuartz { public void jobQuartz() { String[] clusterAliass = SystemConfi ...
- Apache服务器下使用 ab 命令进行压力测试
ab是Apache超文本传输协议(HTTP)的性能测试工具. 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求. #ab -v可以看出其基本信息 ...
- 【洛谷】【动态规划+单调队列】P1725 琪露诺
[题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...
- virtualbox迁移已建虚机存储磁盘方法
1. 先关闭虚拟机 2. 将虚拟机的磁盘拷贝或移动到想要存储的位置,virtualbox一般为.vdi文件(虚拟磁盘文件) 3. vboxmanage internalcommands sethduu ...
- 如何查看MySQL执行的每条SQL
1.登录数据库 [root@mysqltest1 ~]# mysql -uroot -p -h172.16.*.*(你数据库的IP) 2.查看是否开启general_log mysql> sho ...