Java custom ThreadPool - pause task submission and cancel current queued tasks开始,我实现了一个机制,在一段时间内关闭特定连接上正在进行的查询.底层的JDBC连接池由HikariCP保证.正在进行的查询通过调用此处所述的previedstatement close来取消. 即使这样做,我得到了以下错误:

Connection oracle.jdbc.driver.T4CConnection@4bc28c33 marked as broken because of SQLSTATE(08006), ErrorCode(17002)

marked as broken because of SQLSTATE(08006), ErrorCode(17002)

java.sql.SQLRecoverableException: IO Error: Socket read interrupted
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:821)
    at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:983)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1168)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3666)
    at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1426)
    at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3713)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1167)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.io.InterruptedIOException: Socket read interrupted
    at oracle.net.nt.TimeoutSocketChannel.handleInterrupt(TimeoutSocketChannel.java:258)
    at oracle.net.nt.TimeoutSocketChannel.read(TimeoutSocketChannel.java:180)
    at oracle.net.ns.NSProtocolNIO.doSocketRead(NSProtocolNIO.java:555)
    at oracle.net.ns.NIOPacket.readHeader(NIOPacket.java:258)
    at oracle.net.ns.NIOPacket.readPacketFromSocketChannel(NIOPacket.java:190)
    at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:132)
    at oracle.net.ns.NIOPacket.readFromSocketChannel(NIOPacket.java:105)
    at oracle.net.ns.NIONSDataChannel.readDataFromSocketChannel(NIONSDataChannel.java:91)
    at oracle.jdbc.driver.T4CMAREngineNIO.prepareForUnmarshall(T4CMAREngineNIO.java:764)
    at oracle.jdbc.driver.T4CMAREngineNIO.unmarshalUB1(T4CMAREngineNIO.java:429)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:407)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:268)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:655)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:270)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:91)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:807)
    ... 16 common frames omitted

推荐答案

由于我在这个问题上失go 了一天,我将为其他人发布解决方案:运行应用程序使用

Doracle.jdbc.javaNetNio=FALSE

解决问题.

here:

www.example.com及以上版本的JDBC驱动程序在阻塞中使用Java NIO调用 这可能会受到任何中断()调用的影响, 应用程序.这与先前版本的JDBC驱动程序不同, 它使用不受调用影响的基于流的I/O API调用, interrupt().这是一个故意/有意的改变, www.example.com的JDBC驱动程序. 判断应用程序代码是否存在 interrupt()方法调用.

Alternatively, set the following connection property: oracle.jdbc.javaNetNio=false in application tra file Example: Doracle.jdbc.javaNetNio=FALSE

这将指示JDBC驱动程序恢复到12.2之前的行为 使用基于流的I/O API调用不受interrupt()方法影响 电话

Java相关问答推荐

Maven Google Sheets版本问题

如何审查Java dtos中的自定义注释字段?

Annotation @ Memphier无法正常工作,并表示:class需要一个bean,但找到了2个bean:

Javascript在边界中心调整ImageView大小

Kubernetes的Java客户端检索状态.处于终止状态的Pod的阶段';正在运行';

将不受支持的时区UT重写为UTC是否节省?

如何修复IndexOutOfBoundsException在ClerView适配器的onRowMoved函数?

什么是Java原子属性的正确getter和setter

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

在Java中如何从Executors.newFixedThreadPool(MAX_THREAD_COUNT())迁移到虚拟线程

测试容器无法加载类路径初始化脚本

如何在Jooq中获取临时表列引用?

EXCEL中的公式单元格显示#NAME?

如何使用MapStrCut转换双向链接

将stringBuilder + forloop转换为stream + map

在不使用instanceof或强制转换的情况下从父类变量调用子类方法

我的代码是线程安全的吗?[Java、CAS、转账]

协同 routine 似乎并不比JVM线程占用更少的资源

使用@ExceptionHandler的GlobalExceptionHandler还是来自服务器的REST应答的ResponseEntity?

如何使用带有可选参数的类生成器?