method.invoke(class.getDeclaredConstructor().newInstance(), args);
3、 我解决的方法,本方法不用静态的就可以了
你本方法是静态的,需要反射的方法不是静态的,所以反射执行反射方法的时候肯定还没有初始化对象。把两个方法改一致就行了
3. nested exception is redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
连接池中没有可用的jedis,没有正确关闭连接,连接池耗尽
properties文件里jedis的配置有问题,要么是写错了,要么是没设置好端口
增大连接数
4. nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘param’ in ‘class vip.xiaonuo.modular.safety.risk.param.SafetyRiskParam’
找不到get方法,
当时在mapper层用的重载,想起来不能用,写了两个方法
5. java.io.IOException: 你的主机中的软件中止了一个已建立的连接
表单重复提交。
由于客户端在发送请求后,还没等服务器响应就断开了连接,有可能是因为网络原因,突然网断了,但是如果错误频繁出现的话,可能就是服务端的问题了。
有可能是后台处理时间太长了。
服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉。
客户关掉了浏览器,而服务器还在给客户端发送数据。
sql-mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
这是mysql5.7版本以后才会有的设置,需要编辑配置文件或者修改sql语句
9. Invalid bound statement (not found)
我知道这个报错是应为mapper.xml文件没有扫描到
于是我先看了xml的namespace是否有误,又看了mybatis的mapper-locations配置。
发现均无问题。
后来我看了target文件目录下,生成的class文件没有xml文件,知道打包没有将xml文件打包进去。pom文件资源打包拦截配置放开即可
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml
**/ *.yml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml
**/ *.yml</include>
</includes>
<filtering>false</filtering>
</resource>
<resultMap id="userRecord" type="vip.xiaonuo.modular.safety.train.exam.entity.vo.ExamUserListVO">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="brand" column="brand"/>
<result property="phone" column="phone"/>
<collection property="scoreVOList"
ofType="vip.xiaonuo.modular.safety.train.exam.entity.vo.ExamUserScoreVO"
select="selectUserScore"
column="{trainUserId=id,examId=examId}"/>
</resultMap>
mybatis配置懒加载导致RestController或responsebody返回对象Jackson解析失败
解决方法
在实体类前,即你返回需要jackson解析的类,前面添加注解,让Jackson序列化时忽略handler属性
@Data
@JsonIgnoreProperties(value = "handler")
public class ExamUserListVO {
private Long id;
private String name;
private String brand;
private Integer phone;
private List<ExamUserScoreVO> scoreVOList;
Statement cancelled due to timeout or client request
sql执行时间过长,超过客户端连接时间
解决方法:
连接数据库是增加参数:queryTimeout=3000,不行再增加
优化查询,使用索引,排序操作可以放在内存中排序
IORuntimeException
IO运行时异常,常用于对IOException的包装
java.io.EOFException: Unexpected EOF read on the socket
原因:
前端mock把requestBody给消费掉了,导致传到后端没有body,后端在解析的时候发现request请求头的content-length是59,就一直等待接收数据,与此同时,前端也在等待后端返回结果。1分钟后,前端等待超时,前端发EOF请求(具体为何会发EOF还需要进一步学习),后端收到以后,发现和预期的消息不一致,就报了EOF这个错误。
解决方法:
让前端改
class path resource [xx] cannot be resolved to absolute file path because it does not reside
原因:
在springBoot下放入静态文件,编译器运行测试时可以拿到,一打成jar文件就报错
这是因为:在jar文件中,不能直接通过文件资源路径拿到文件,但是可以在jar包中拿到文件流。(一定要用流,不要尝试去拿到绝对路径,否则报错!
解决方法:
之前的写法:
@Override
public void exportTemplate(HttpServletResponse response) {
// 读取本地的文件
String filePath = "/template/金鹰安全-隐患导入模板.xlsx";
ClassPathResource readFile = new ClassPathResource(filePath);
// 获取文件对象
File file = null;
try {
file = readFile.getFile();
} catch (IOException e) {
e.printStackTrace();
}
// 获取文件流
DownloadUtil.download(file, response);
}
所以改变写法:
@Override
public void exportTemplate(HttpServletResponse response) {
String filePath = "/template/金鹰安全-隐患导入模板.xlsx";
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
org.springframework.core.io.Resource[] resources = resolver.getResources(filePath);
org.springframework.core.io.Resource resource = resources[0];
InputStream stream = resource.getInputStream();
File file = new File(filePath);
FileUtils.copyToFile(stream, file);
DownloadUtil.download(file, response);
} catch (IOException e) {
e.printStackTrace();
}
}
delete from prevention_danger_record where id in (
SELECT prevention_danger_record.id from prevention_danger_record LEFT JOIN prevention_danger_task on prevention_danger_record.check_task_id = prevention_danger_task.id where prevention_danger_task.id is null
);
意思是要删除再另一张关联表中没有匹配到的脏数据。
但是mysql不允许这样操作,需要在写一层select包装一下
正确的sql如下
delete from prevention_danger_record where id in (
SELECT id from (
SELECT prevention_danger_record.id from prevention_danger_record LEFT JOIN prevention_danger_task on prevention_danger_record.check_task_id = prevention_danger_task.id where prevention_danger_task.id is null
) as a
);