今天搭建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 等启动项目时的异常 或 程序异常的解决思路的更多相关文章

  1. Spring:启动项目时加载数据库数据(总结)

    在项目中需要启动程序时,要将数据库的用户信息表加载到内存中,找到一下几种方式. 1.实现ApplicationListener接口,重写onApplicationEvent方法,可以在项目启动的时候执 ...

  2. SpringBoot启动项目时提示:Error:java: 读取***.jar时出错;

    场景 在IDEA中新建SpringBoot项目后,修改了默认的Maven仓库和配置文件,然后在启动项目时提示: Error:java: 读取\org\assertj\assertj-core\3.11 ...

  3. SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在

    场景 在IDEA中新建SpringBoot项目,后启动项目时提示: Error:(3, 32) java: 程序包org.springframework.boot不存在 实现 将pom.xml中par ...

  4. IDEA问题之“微服务启动项目时,不会加载Spring Boot到Services中”

    1.启动项目时,不会加载Spring Boot到Services中 现象解析: 启动项目时 会在debug的位置加载项目 注:这里没有配图,因为问题已解决,未记录图,需往后遇到记录 解决方案: 需要在 ...

  5. vue-cli 启动项目时空白页面

    vue-cli 启动项目时空白页面 在启动项目时 npm run serve / npm run dev 启动 vue 项目空白页:且终端及控制台都未报错 通过各种查阅发现在项目根目录中 vue-co ...

  6. 启动项目时出现java.io.EOFException异常。

    错误: 2018-4-18 10:55:54 org.apache.catalina.session.StandardManager doLoad 严重: IOException while load ...

  7. IntelliJIdea 2016.2 使用 tomcat 8.5 调试spring的web项目时,bean被实例化两次导致timer和thread被启动了两遍的问题的解决

    今天新搭建了一个spring的web项目,项目启动时会启动一个线程,线程里定时执行任务,另外还启动了一个定时器,每秒钟统计系统吞吐量等业务性能数据.但是调试的时候惊奇的发现定时器和线程均被启动了两次. ...

  8. 第三章 Maven构建 Java Spring Boot Web项目

    3.1   认识Srping Boot Spring Boot是一个框架,是一种全新的编程规范,它的产生简化了对框架的使用,简化了Spring众多的框架中大量的繁琐的配置文件,所以说Spring Bo ...

  9. 启动项目时tomcat问题汇总

    最近SVN上迁下来的新项目,在刚运行项目时tomcat就报错了.以前也经常遇到,没太引起注意,今天终于决定将这个问题好好总结一下. 首先 1.错误:An internal error occurred ...

随机推荐

  1. UITableView中cell点击的绚丽动画效果

    UITableView中cell点击的绚丽动画效果 本人视频教程系类   iOS中CALayer的使用 效果图: 源码: YouXianMingCell.h 与 YouXianMingCell.m / ...

  2. [沫沫金]JavaWeb企业信息系统,增加操作记录、数据库记录

    背景 系统出现数据莫名丢失,业务人员的反馈无法复现问题.纠结了很久,最终老板发话要记录操作,通过日志进行分析重现 环境 SSH框架 目标 1.记录访问了那个方法,使用的参数及返回的内容 2.记录新增. ...

  3. September 29th 2017 Week 39th Friday

    Human life is ephemera, which makes it precious. 生命短暂,所以珍贵. Don't waste time on praying to the God. ...

  4. 面对对象程序设计_task2_C++视频教程

    lessons about C++ 1月份的事情不该留到2月份来做,这几天看了几个地方的C++视频教程,不习惯于云课堂的话多等等,最终还是选择了慕课网上面的资源,也安下心来看了一些内容,下面附上课程详 ...

  5. 【Alpha】Daily Scrum Meeting

    一 博客集合贴 11月15日 [Alpha]Daily Scrum Meeting——blog1 11月18日 [Alpha]Daily Scrum Meeting——blog2 11月19日 [Al ...

  6. Spring实战 MethodInvokingJobDetailFactoryBean使用与分析

    定义一个Job类 public class OffsetsQuartz { public void jobQuartz() { String[] clusterAliass = SystemConfi ...

  7. Apache服务器下使用 ab 命令进行压力测试

    ab是Apache超文本传输协议(HTTP)的性能测试工具. 其设计意图是描绘当前所安装的Apache的执行性能,主要是显示你安装的Apache每秒可以处理多少个请求. #ab -v可以看出其基本信息 ...

  8. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  9. virtualbox迁移已建虚机存储磁盘方法

    1. 先关闭虚拟机 2. 将虚拟机的磁盘拷贝或移动到想要存储的位置,virtualbox一般为.vdi文件(虚拟磁盘文件) 3. vboxmanage internalcommands sethduu ...

  10. 如何查看MySQL执行的每条SQL

    1.登录数据库 [root@mysqltest1 ~]# mysql -uroot -p -h172.16.*.*(你数据库的IP) 2.查看是否开启general_log mysql> sho ...