MyBatis-Spring-Boot
MyBatis-Spring-Boot copied to clipboard
No operations allowed after statement closed.
这种报错在直接使用java.sql.Statement比较好处理。 但在spring boot 使用starter后需要怎么处理呢?
### Error updating database. Cause: java.sql.SQLException: No operations allowed after statement closed.
### SQL: INSERT INTO car_tt ( id,insertTime,tid) VALUES( ?,?,?)
### Cause: java.sql.SQLException: No operations allowed after statement closed.
; SQL []; No operations allowed after statement closed.; nested exception is java.sql.SQLException: No operations allowed after statement closed.
org.springframework.dao.TransientDataAccessResourceException:
### Error updating database. Cause: java.sql.SQLException: No operations allowed after statement closed.
### SQL: INSERT INTO car_tt ( id,insertTime,tid) VALUES( ?,?,?)
### Cause: java.sql.SQLException: No operations allowed after statement closed.
; SQL []; No operations allowed after statement closed.; nested exception is java.sql.SQLException: No operations allowed after statement closed.
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:108)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
at com.sun.proxy.$Proxy79.insert(Unknown Source)
at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:57)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy85.insert(Unknown Source)
```
做什么操作导致链接关闭了?
已经在mysqlUrl上添加"&autoReconnect=true" , dao都是使用通用mapper,没有关闭statement的逻辑。 代码中都没有出现SqlSessionTemplate
执行下面这个语句报了上面的错。
public void insertCarTt(CarTtDO carTtDO) {
carTtDOMapper.insert(carTtDO);
}
发现报statement关闭错误的上方都有一个mysql ”MySQLIntegrityConstraintViolationException: Duplicate entry“ 的异常
难道这两个报错之间有关联关系?
···java Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '862442030055280-1495778004781' for key 'index7' at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) at com.mysql.jdbc.Util.getInstance(Util.java:408) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2501) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:2931) at com.alibaba.druid.wall.WallFilter.preparedStatement_execute(WallFilter.java:601) at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:2929) at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapt ···
加判断,对这种duplication entry进行预检查后,statement关闭的报错 没有再出现
操作db抛异常后,那个环节会关闭statement呢?
不确定是哪个环节。。主键冲突是因为你重复插入同一个对象?
是的。出现重复是业务问题,客户端网络问题导致传了相同的数据。
我把这种情况在insert之前处理了,statement close的报错就没有再出现过
用过温少,他说druid没有close,
通用mapper也没有关的话。
现在只剩下排查mybatis的SqlSessionTemplate了
你可以看一下这个commit:https://github.com/alibaba/druid/commit/1d7bc65b3d8f3d5dbaca7e45a8b1b9d78ed2a104,这个问题1.0.29之后已经解决了
这个是druid的问题