项目实战 —— Java项目运行报错及决绝方案
单个 SSM 框架
1、报 LifecycleException,再配置一下 jdk 即可,然后再手动添加 maven
解决方法:
然后, 手动添加 jar 包
2、maven 项目, 右键 maven build 启动项目的时候,报下面错误,没有在 pom 配置 tomcat7 插件
3、报找不到 beans 插件:更新一下项目就好
4、也许你运行的是 jre 而不是 jdk , 并且报 MojoExCeption,这时候就要配置 jdk 了,步骤如下
5、ClassNotFoundException, 类找不到异常,通常是 mapper.xml 里,返回值数据类型或参数类型映射的实体类不对,还有就是 tomcat 下 WEB-INF 里少了 jar 包,右键项目 properties,Deployment Assembly ,add, 然后把 Maven Dependencies 添加,下步在 eclipse 部署项目,部署完后 clean 一下即可解决
解决方法:
6.报 Unsupported major.minor version 52.0 (unable to load class com.platform.framework.web.SessionListener),先检查本地的 JDK 环境变量配了没有,输入 java -version , 然后重启项目即可
7. 报 org.apache.jasper.JasperException , /index,jsp not found 错误。
解决方法
(1)右键点击项目 build path---Add Libraries--Myeclipse Library 相当于把 jstl 的 jar 包加上了,点击 finish
(2) 或者找到 tomcat 下的 webapps, 把原来部署的项目删掉,从新部署再启动项目即可正常运行
8. 报错提示:The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files;
就是当你在 myeclipse 引用了不同版本的 JDK,解决方法是修改 myeclipse 工具 prefenence 的 jdk 版本为 1.6 即可
9. 报找不到 beans, 或者无法读取文档,原因为 1)无法找到文档; 2) 无法读取文档; 3) 文档的根元素不是,就是网络不好,在网络好的情况下重新启动项目即可
10.smm 框架,调用 mapper 接口插入方法报空指针
解决办法:把接口的方法 copy 到另一个正常的 mapper,xml 中也对应 sql 也 copy
11. 报 XX 属性在 string 没有 getter 属性,
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'business' in 'class java.lang.String'
解决办法:
检查,mapper.xml 条件入参是否有误,如 下,
<select id="getYycgdBm" parameterType="string" resultType="string">
select '${value}' || yycgdbm${business}.nextval bm from dual
</select>
12 报错 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): yycg.business.dao.mapper
经过查找为 mapper.xml 的 id 前面多了一个空格
其他可能原因排查:
参数,方法名,返回值不一致,Mapper 类名和 xml 文件名不一致
13.ssm ,service 业务实现类 impl 调用 mapper 接口报空指针,因为在业务实现类注入 rmappe 时没有加 @Autowired 或其他注解
14ssm, 查询报无效的列索引,模糊查询那应该用 $ 符号而不是 #号
15. 报 java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Sat Sep 26 11:19:55 CST 2020]; root of context hierarchy
解决办法; 把 pom 里配置的内置 tomcat 去掉
16. 报 result Maps collection already contains value for yycg.base.dao.mapper.SysuserMapperCustom.mapper_resultMap[findMenuByroleidResultMap]_collection[menus]
17. 报错 Caused by: org.apache.catalina.LifecycleException: A child container failed during start
原因及解决:路径找不到,在本地添加相关目录或改路径
18.Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/classes/spring/applicationContext-base-dao.xml]: Invocation of init method failed; nested exception is java.lang.NullPointerException
解决方案:暂时在最后一个中文与 - 之间加了一个空格 (有待验证)
19. 项目开了多线程后,eclipse,debug 模式运行项目会停留在 processWorkerExit(w, completedAbruptly); 这一行代码上。
1、问题描述在eclipse或者集成eclipse的其他开发工具中,在tomcat中部署了项目debug模式启动项目, 项目启动之后修改项目java源代码,eclipse会自动部署项目到tomcat中。 但在tomcat自动重启时会自动停止到processWorkerExit(w, completedAbruptly);这一行代码上。
2、问题出现原因
原因是因为在 java.util.concurrent.ThreadPoolExecutor类中的 runWorker(Worker w)方法上有未捕获的异常信息,源代码如下: 可见在try之后并没有catch语句。而在eclipse的java debug模式中就有“遇到未捕获异常停止执行”的选项。只要不勾选该项就可以解决该问题了。 final void runWorker(Worker w) { Runnable task </span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> w.firstTask; w.firstTask </span><span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">; boolean completedAbruptly </span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> true; try { </span><span style="color: rgba(0, 0, 255, 1)">while</span> (task <span style="color: rgba(128, 128, 128, 1)">!=</span> <span style="color: rgba(0, 0, 255, 1)">null</span> <span style="color: rgba(128, 128, 128, 1)">||</span> (task <span style="color: rgba(128, 128, 128, 1)">=</span> getTask()) <span style="color: rgba(128, 128, 128, 1)">!=</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) { w.lock(); clearInterruptsForTaskRun(); try { beforeExecute(w.thread, task); Throwable thrown </span><span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">; try { task.run(); } catch (RuntimeException x) { thrown </span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> x; throw x; } catch (Error x) { thrown </span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> x; throw x; } catch (Throwable x) { thrown </span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> x; throw new Error(x); } finally { afterExecute(task, thrown); } } finally { task </span><span style="color: rgba(128, 128, 128, 1)">=</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">; w.completedTasks</span><span style="color: rgba(128, 128, 128, 1)">++</span><span style="color: rgba(0, 0, 0, 1)">; w.unlock(); } } completedAbruptly </span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> false; } finally { processWorkerExit(w, completedAbruptly); } }
3、解决方案
去掉java</span><span style="color: rgba(128, 128, 128, 1)">-></span>debug<span style="color: rgba(128, 128, 128, 1)">-></span>suspend execution <span style="color: rgba(0, 0, 255, 1)">on</span> uncaught exceptions 选项钱的对勾就行了。</pre>
20.tomcat 运行一段时间后不运行了,突然不打印日志,中断等问题
1. 可能是内存溢出或者数据库连接池的问题。如:数据库的某些连接用完之后没有关闭,然后连接池设置的超时时间大于数据设置的最大过期时间,导致连接一直未释放。
2. 内存不足,多分配点内存给 tomcat