springboot项目使用mybatisPlus连接OB数据库,频繁报错空指针

错误日志如下:

Exception in thread “master network timeout executor” java.lang.NullPointerException

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

配置信息如下图

补充错误日志


Exception in thread "master network timeout executor" java.lang.RuntimeException: java.sql.SQLException: Invalid socket timeout value or state

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6651)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.sql.SQLException: Invalid socket timeout value or state

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1207)

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1108)

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1095)

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1064)

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6179)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

... 3 more

Caused by: java.net.SocketException: Socket is closed

at java.net.Socket.setSoTimeout(Socket.java:1137)

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

... 4 more

Exception in thread "master network timeout executor" java.lang.NullPointerException

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Exception in thread "master network timeout executor" java.lang.NullPointerException

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Exception in thread "master network timeout executor" java.lang.NullPointerException

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Exception in thread "master network timeout executor" java.lang.NullPointerException

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Exception in thread "master network timeout executor" java.lang.RuntimeException: java.sql.SQLException: Invalid socket timeout value or state

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6651)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.sql.SQLException: Invalid socket timeout value or state

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1207)

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1108)

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1095)

at com.alipay.oceanbase.jdbc.SQLError.createSQLException(SQLError.java:1064)

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6179)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

... 3 more

Caused by: java.net.SocketException: Socket is closed

at java.net.Socket.setSoTimeout(Socket.java:1137)

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

... 4 more

Exception in thread "master network timeout executor" java.lang.NullPointerException

at com.alipay.oceanbase.jdbc.MysqlIO.setSocketTimeout(MysqlIO.java:6177)

at com.alipay.oceanbase.jdbc.ConnectionImpl$12.run(ConnectionImpl.java:6649)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)


Invalid socket timeout value or state 看样子是 socketTimeout 配置有问题

麻烦贴一个更完整的 jdbcUrl 配置

1 个赞
spring:
  datasource:
    dynamic:
      primary: master
      datasource:
        master:
          username: xxxxx
          password: xxxxxxx
          driver-class-name: com.p6spy.engine.spy.P6SpyDriver
          url: jdbc:p6spy:oceanbase://xxxxxx:3306/Xxxxx_DEV?rewriteBatchedStatements=true&allowMultiQueries=true&useLocalSessionState=true&useUnicode=true&characterEncoding=utf-8&remarksReporting=true

      hikari:
        max-pool-size: 30
        min-idle: 5
        max-lifetime: 30000
        idle-timeout: 28000
        # 须替换为实际数据库可执行的SQL语句
        connection-test-query: select 1 from dual
        connection-timeout: 30000




这个是完成的连接信息,使用的springboot框架,mybatisPlus的持久层

你好,可以升级 oceanbase-client 驱动到 1.1.10.1 及以上的版本应该可以解决这个问题

还有一个,如果您用的是 MySQL 模式的话,可以直接用 MySQL 官方的驱动:mysql-connector-java 

3 个赞

oceanbase-client-1.1.10.jar我现在用的这个驱动包,您说的哪里驱动包,哪里可以下载或者提供。我用的Oracle模式的