org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException:
Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: interrupt 试过很多次了,去掉druid就不会报错,加了druid就报错,插入和更新用的是同一个连接导致的?该如何解决这个问题啊??下面是我的配置
更新成了这个配置,也会报错,注释掉所有druid的配置包括依赖,就没有问题!
原提问者GitHub用户patience00
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
种情况可能会报空指针异常,原因是:
在同一个事务中,先插入数据,然后等待一段时间再更新该数据。
由于等待的时间比较长,数据库回收了该行记录,导致找不到要更新的数据行。
具体可能如下:
java
Copy
public void method(){
// 插入数据
insertData();
// 等待一分钟
Thread.sleep(60000);
// 尝试更新这条数据,但数据库回收了这条记录,导致找不到要更新的记录,报空指针
updateData();
}
为了避免这种情况,有几种处理方式:
减少等待时间,让更新操作尽快执行。
在更新前,重新获取这条记录,确保还存在。
java
Copy
public void method(){
insertData();
Thread.sleep(60000);
// 在更新前,重新根据ID查询出这条数据
Data data = findDataById();
if(data != null){
updateData(data);
}
}
在插入时,将数据ID返回,用于之后直接更新。
将两步操作放在同一个事务中执行,确保数据不丢失。