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 ...
随机推荐
- iOS中block类型大全
iOS中block类型大全 typedef的block 作为属性的block 作为变量的block 作为方法变量入参的block 作为方法参数的block 无名block 内联函数的block 递归调 ...
- iOS设计模式 - 中介者
iOS设计模式 - 中介者 原理图 说明 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 注:中介者对象本身没有复用价值 ...
- 铁乐学python26_hashlib+configparser+logging模块
大部份内容摘自博客http://www.cnblogs.com/Eva-J/ hashlib模块算法介绍 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢? ...
- 【转】爬虫的一般方法、异步、并发与框架scrapy的效率比较
该文非原创文字,文字转载至 jclian91 链接:https://www.cnblogs.com/jclian91/p/9799697.html Python爬虫的N种姿势 问题的由来 ...
- RabbitMQ学习以及与Spring的集成(三)
本文介绍RabbitMQ与Spring的简单集成以及消息的发送和接收. 在RabbitMQ的Spring配置文件中,首先需要增加命名空间. xmlns:rabbit="http://www. ...
- Matlab面向对象编程基础
DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...
- 基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)
上一篇介绍了定制器相关的文件,这篇我们来看看整个定制器的界面部分,了解了页面结构有助于更好的理解定制器的实现,那么现在开始吧! 首先,我们来看看整体的结构: 整体结构比较简单,主要包括三个部分: 1. ...
- sql排序方法
SQL Server中使用order by charindex按指定顺序排序 在使用SQL Server数据库编程中,有时需要对取出来的数据按照指定的顺序排序,例如,取出来的数据某个字段值有张三.李四 ...
- Spring源码分析(九)解析默认标签中的自定义标签元素
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 到这里我们已经完成了分析默认标签的解析与提取过程,或许涉及的内容太多,我 ...
- ZOJ 3203 Light Bulb (三分+计算几何)
B - Light Bulb Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit ...