开发中遇到了报错该如何处理?
百度呀,google呀,都太泛化了,搜索出来的可能有很多个解决方法,但可能只有一种方法来解决你的问题。
解决访问的方法:找到错误信息,分析错误原因,逐一排除,最后便是答案。
一次解决错误的过程
找到错误信息
某一次 SpringBoot 项目启动过程中报错,没有任何日志,就程序结束了。
如何捕捉到错误,查看错误信息?如下:
try {
SpringApplication.run(Application.class, args);
}catch(Exception e) {
e.printStackTrace();
}
分析错误信息
发现是 "CLASS NOT FOUND" 错误,意思是类存在。
分析类找到到可能的原因:
-
(1)远程仓库中的 api 包中没有此类。
-
(2)本地 maven 仓库没有下载下来jar依赖
那么就从这两个方向入手:
-
(1)查看仓库中 jar 的位置,发现没有jar包,只有 *.lastUpdated 文件:由于网络或者其他原因导致jar包下载失败。
-
解决问题:删除 *.lastupdated 文件后,重新导入包:mvn -U clean package
-
-
(2)查看远程仓库中的 jar 包,确认好版本号,发现是确实存在该类,排除原因(1)。
另外一次解决错误的过程。
错误是一层层抛出:查看最里面一层,就是最接近错误的地方。
2020-12-29 23:26:44.406 WARN [AnnotationConfigServletWebServerApplicationContext:559][main] - [TID: ] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataBaseController': Unsatisfied dependency expressed through field 'taskBaseMapper'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'taskBaseMapper' defined in file [/Users/bjhl/IdeaProjects/taobao/taobao-web/target/classes/com/alibaba/m/web/dao/mapper/TaskBaseMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [org/mybatis/spring/boot/autoconfigure/MybatisAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception; nested exception is org.springframework.core.NestedIOException: Failed to parse mapping resource: 'URL [jar:file:/Users/bjhl/.m2/repository/com/alibaba/m/m-individual-provider-dal/1.0.0-SNAPSHOT/m-individual-provider-dal-1.0.0-SNAPSHOT.jar!/mapper/individual/IndividualCrowdMapper.xml]';
nested exception is org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'URL [jar:file:/Users/bjhl/.m2/repository/com/alibaba/m/m-individual-provider-dal/1.0.0-SNAPSHOT/m-individual-provider-dal-1.0.0-SNAPSHOT.jar!/mapper/individual/IndividualCrowdMapper.xml]'. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.alibaba.m.individual.provider.facade.bo.IndividualCrowdListBO'. Cause: java.lang.ClassNotFoundException:
Cannot find class: com.alibaba.m.individual.provider.facade.bo.IndividualCrowdListBO
Error parsing Mapper XML ,发现是解析 mapper 文件出错, 怀疑是mapper文件哪里写错了,找到这个mapper:IndividualCrowdMapper.xml,发现是SQL写错。
但是这是引用别人的 jar 包,为何会发生这种错误呢?
打开对方的 api 包,发现 api 包引用了几个模块,其中有个模块就包含 IndividualCrowdMapper.xml,但是自己的服务并不需要这个模块,api 包仅仅是引用一些服务的接口,并不会直接引用这个 xml 文件,所以果断排除这个依赖模块,仅仅引用 api 模块即可。(使用 idea 插件 Dependency Analyzer 工具查看依赖,并排除)
<dependency>
<groupId>com.alibaba.taobao</groupId>
<artifactId>taobao-provider-api</artifactId>
<version>1.1.2-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>taobao-provider-facade</artifactId>
<groupId>com.alibaba.taobao</groupId>
</exclusion>
<exclusion>
<artifactId>taobao-provider-dal</artifactId>
<groupId>com.alibaba.taobao</groupId>
</exclusion>
</exclusions>
</dependency>
# 总结
解决问题的方法论:遇到问题不要胡乱猜测,一上来就依靠搜索引擎,要望闻问切:先去找到错误信息,分析错误可能的原因,逐一排查,最后解决错误。