开发者社区 问答 正文

Druid连接,事务控制开启,commit的时候报connection hold?报错

具体报错信息:

java.sql.SQLException: connection holder is null
    at com.alibaba.druid.pool.DruidPooledConnection.checkState(DruidPooledConnection.java:1090) ~[druid-1.0.11.jar:1.0.11]
    at com.alibaba.druid.pool.DruidPooledConnection.commit(DruidPooledConnection.java:712) ~[druid-1.0.11.jar:1.0.11]
    at com.zr.dataservice.server.db.DBbean.WithTransactionReturn(DBbean.java:168) [JGDataServer_Lab.jar:?]
    at com.zr.dataservice.server.job.LabDataLoaderJob$1.run(LabDataLoaderJob.java:152) [JGDataServer_Lab.jar:?]
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) [?:1.8.0_71]
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source) [?:1.8.0_71]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source) [?:1.8.0_71]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) [?:1.8.0_71]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:1.8.0_71]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:1.8.0_71]
    at java.lang.Thread.run(Unknown Source) [?:1.8.0_71]
Caused by: java.sql.BatchUpdateException: ORA-03106: 致命的双工通信协议错误

    at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10070) ~[ojdbc6-11.jar:11.2.0.1.0]
    at oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:213) ~[ojdbc6-11.jar:11.2.0.1.0]
    at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeBatch(DruidPooledPreparedStatement.java:559) ~[druid-1.0.11.jar:1.0.11]
    at com.zr.dataservice.server.service.lab.LabDAO.executeAndCommit(LabDAO.java:250) ~[JGDataServer_Lab.jar:?]
    at com.zr.dataservice.server.service.lab.LabDAO.batchInsert(LabDAO.java:222) ~[JGDataServer_Lab.jar:?]
    at com.zr.dataservice.server.service.lab.ProcessLoader.loadBatch(ProcessLoader.java:47) ~[JGDataServer_Lab.jar:?]
    at com.zr.dataservice.server.job.LabDataLoaderJob$1.lambda$0(LabDataLoaderJob.java:153) ~[JGDataServer_Lab.jar:?]
    at com.zr.dataservice.server.db.DBbean.WithTransactionReturn(DBbean.java:167) ~[JGDataServer_Lab.jar:?]
    ... 8 more

Druid的版本是1.0.11,配置是这样

<driverClassName>oracle.jdbc.driver.OracleDriver</driverClassName>
    <initialSize>6</initialSize>
    <MaxActive>6</MaxActive>
    <maxWait>6</maxWait>
    <validateQuery>select 1 from dual</validateQuery>
    <removeAbandoned>false</removeAbandoned>
    <removeAbandonedTimeout>1800</removeAbandonedTimeout>

具体业务就是在一个preparestatment执行exeuteBatch()之后,执行commit就报上面错误,哪位大神可以指点一二

展开
收起
爱吃鱼的程序员 2020-06-09 16:43:37 1064 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    是否存在跨线程使用链接?同时建议升级到最新版本<spanstyle="font-family:Verdana,sans-serif,宋体;font-size:13.3333px;background-color:#FFFFFF;">http://repo1.maven.org/maven2/com/alibaba/druid/1.0.18/升级以后还是这个问题的!路过!

    我今天也出这个问题了。。
    springboot配置的读写分离。
    从日志上来看,发生错误的时候,明明上下文显示切换到了主库,然后执行update就报数据库只读错误。
    异常堆栈显示也是connectionholderisnull。
    版本:1.1.9

    2020-06-09 16:43:55
    赞同 展开评论
问答分类:
问答地址: