• 报“ Got minus one from a read call”的错误


    在部署应用的时候,有时候应用可以直接启动,但偶尔应用却无法启动,报错信息是:
    java.sql.SQLRecoverableException: IO Error: Got minus one from a read call

    原因及解决方法

    我有好几个应用系统需要连接数据库,测试发现如果这个应用在最开始启动就不会报错,如果是启动了好几个应用之后再启动的话就会报错了。
    一个应用连接数据库的时候是通过连接池的机制来连接的,数据库用一个参数max-session来描述连接池的大小,而应用同样也有一个参数,这个参数表示它连接数据库连接池所占用的最少资源,例如:总共有10个应用需要连接数据库,如果每个应用连接数据库的最小连接数为10,那么10个应用总共会有100个连接(可以看做是线程数),这样就要求数据库连接池的max-session必须大于100,否则就会报“ Got minus one from a read call”的错误。
    因此,有两种方法可以解决这个问题:
    (1)扩大数据库连接池,这个需要系统数据库管理员来协助完成
    (2)减小应用连接数据库时需要的初始化连接数
    我的这个应用是java应用,关于数据库的设置在配置文件jdbc.properties里面,内容如下:

        jdbc.driverClass=oracle.jdbc.driver.OracleDriver
        jdbc.url=jdbc:oracle:thin:@nantianpaydb.baidupay.com:8002:ntpzn
        jdbc.user=cif
        jdbc.password=cif
    
        #druid datasource
        druid.initialSize=10
        druid.minIdle=10
        druid.maxIdle=100
        druid.maxActive=500
        druid.maxWait=30000
        druid.timeBetweenEvictionRunsMillis=60000
        druid.minEvictableIdleTimeMillis=300000
        druid.validationQuery=SELECT 1 from dual
        druid.testWhileIdle=true
        druid.testOnBorrow=false
        druid.testOnReturn=false
        druid.poolPreparedStatements=true
        druid.maxPoolPreparedStatementPerConnectionSize=20
        druid.filters=wall,stat
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    其中

    druid.initialSize=10
    • 1

    就是一个应用连接数据库的初始化参数,只要将之调小即可解决问题。

  • 相关阅读:
    BZOJ_1712_[Usaco2007 China]Summing Sums 加密_矩阵乘法
    BZOJ_2693_jzptab_莫比乌斯反演
    BZOJ_5296_[Cqoi2018]破解D-H协议_BSGS
    BZOJ_5301_[Cqoi2018]异或序列&&CF617E_莫队
    前端开发框架对比
    现在企业流行的java框架技术
    尼古拉斯·沃斯
    算法和流程图
    Java中DAO的实现
    java中的DAO设计模式
  • 原文地址:https://www.cnblogs.com/lcword/p/8036289.html
Copyright © 2020-2023  润新知