Spring Boot问题汇总三
1.Cannot find class
这个问题真的很奇怪,路径上明明有这个文件,但是实际上总是提示找不到类。 Failed to parse mapping resource,Cannot find class: org.jeecg.modules.quartz.entity.QuartzJob
【尝试方案】
(1)修改启动类,把该尝试的方法都尝试了,一个* ,还是两个 *,都不起作用
1 |
(2)编辑 pom.xml
在pom.xml中增加了一些配置,其实加不加的都可以了,也没有什么用。
1 | <bulid> |
【解决方案】
最后解决方案竟然是我配置文件写错了,因为我在 mapper-locations 中多加了一个 * 号,真是浪费了我很多的时间。但是奇怪就奇怪在这,因为 classpath* 本来就是可以用的,但是到我这里,就不能用了。
1 | # 错误 |
【1】.Failed to parse mapping resource…… 其实报错信息里提示的很清楚,在这个XML文件中31行,14列有错误,导致XML文件无法解析,从而spring容器初始化失败。。
【2】.SpringBoot多模块项目如何扫描全局mapper接口和mapper.xml文件 mapper.xml文件的路劲配置是否正确,classpath指的是resources目录,如果不在resources目录下,注意正确配置路劲。
【3】.springboot+mybatis报错找不到实体类
【4】.spring mybatis - Failed to parse mapping resource
【5】.org.springframework.core.NestedIOException: Failed to parse mapping resource: ‘file [XXX.xml]’;报错问题
【6】.SpringBoot多模块项目如何扫描全局mapper接口和mapper.xml文件 1.主启动类配置 在类名上加上如下注解;2.application.properties文件配置;3.3.pom.xml
2.Error creating bean with name ‘serverEndpointExporter’ defined in class path resource [org/jeecg/config/WebSocketConfig.class]: jakarta.websocket.server.ServerContainer not available
这个问题也是挺莫名其妙的,就是运行不起来,然后我最后还是定位到了版本依赖的问题。
【尝试方案】
我看了几篇文章,然后配置了 websocket 和 springboot test, 结果没有用。
1 | <dependency> |
【解决方案】
最后的解决方案,就是依赖的版本冲突,我把子模块的 spring-boot-starter-websocket 删除了,然后重新修改了部分的代码,这才算好了。
【1】.javax.websocket.server.ServerContainer not available
【2】.SpringBoot项目测试类报错: Error creating bean with name ‘serverEndpointExporter’ defined in class path resource … 在SpringBootTest注解中添加webEnvironment配置:
【3】.Java jakarta.websocket.server.ServerContainer not available(已解决) 测试类的注解增加 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
【4】.SpringBoot启动测试时报错(javax.websocket.server.ServerContainer not available) 得知SpringBootTest在启动的时候不会启动服务器,所以WebSocket自然会报错,这个时候需要添加选项webEnvironment,以便提供一个测试的web环境。如下:
3.java.lang.NoClassDefFoundError: Could not initialize class com.dji.sdk.cloudapi.device.DeviceOsdWsResponse
这个问题也很头疼,就是明明有这个类,也有这个包,就是会提示这个错误。
【尝试方案】
(1)我尝试了几个依赖的增加,也没有什么头绪,只能胡乱的测试。
(2)尝试找到 ExceptionInInitializerError 这个问题的出现,找到了这个错误:Unable to create a Configuration, because no Bean Validation provider could be found. Add a provider like Hibernate Validator (RI) to your classpath,找到了错误:Can not set java.lang.Long field com.dji.sample.manage.model.entity.DeviceEntity.updateTime to java.util.Date
(3)尝试找到了一个可能的问题,主要就是数据库字段的对应上。问题就出在了这个 updateTime 上,数据库部分表用了 bigint ,有些表用了 datetime,所以导致了问题。我因为用了 jeecgboot 框架,也就把原先的 create_time 和 update_time 列删掉了,然后新建了 datetime 类型的列。
【解决方案】
经过尝试,我还是落脚在了这个 BaseModel 上了,原先的问题是使用了 javax 里面的库,因为我用的是springboot3,于是我都换成 jakarta 这个库。
1 | // 原先问题 |
【1】.java.lang.NoClassDefFoundError: Could not initialize class XXX
【2】.3 ways to solve java.lang.NoClassDefFoundError in Java J2EE
【3】.java.lang.NoClassDefFoundError: Could not initialize class xxx
【4】.java.lang.NoClassDefFoundError: Could not initialize class xxx 原因及解决方法 由于测试是多次失败后, 把NoClassDefFoundError 异常发给我, 所以追踪异常出现问题, 只有找到 ExceptionInInitializerError 的整个错误栈才能找到真正的原因,解决方案:1. install所属模块;2.查看错误栈, 是不是这个类启动项目初始化失败了
【5】.java.lang.NoClassDefFoundError: Could not initialize class xxx 原因及解决方法 JVM在加载类的时候,会初始化类里的静态变量,或执行静态块,如果这个时候抛出了异常,该类就会加载失败,那么以后任何使用到这个类的地方,都会抛出NoClassDefFoundError异常
【6】.OpenApi Spring 3 NoProviderFoundException 这里是用了 Sprindocs’ OpenApi 这个东西,给我了一个启发。
4.Method does not override method from its superclass
这里的 @Overrde 总是报错,提示没有实现相关的方法。
1 | public class AuthInterceptor implements HandlerInterceptor { |
【解决方案】
这里的解决方案,主要是因为类型不同导致的。我用了springboot3.x,这里的 preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) 的 HttpServletRequest 是 jakarta.servlet.http 包下的,而不是 javax.servlet.http 包下的。
【1】.IDEA中@override注解报错信息“Method does not override method from its superclass” !!!首先查看这个方法是不是重载父类的方法,如果没有父类,那么使用了@override一定会报错;!!!查看重载时是不是方法名/参数有区别;
【2】.SpringBoot3-实现和注册拦截器
【3】.A method does not override a method in its superclass
【4】.Spring MVC学习(8)—HandlerInterceptor处理器拦截器机制全解