• springboot-oracle工程win下正常,centos下不能访问数据库


    工程在win下正常运行,部署到centos下出现下述异常:

    ### Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLRecoverableException: IO Error: Connection reset
    ### The error occurred while executing a query
    ### Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLRecoverableException: IO Error: Connection reset
            at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:149)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:140)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:76)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:426)
            ... 78 common frames omitted
    Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLRecoverableException: IO Error: Connection reset
            at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81)
            at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:80)
            at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:67)
            at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:336)
            at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.prepareStatement(MybatisSimpleExecutor.java:93)
            at com.baomidou.mybatisplus.core.executor.MybatisSimpleExecutor.doQuery(MybatisSimpleExecutor.java:66)
            at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:324)
            at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
            at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
            at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:108)
            at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
            at com.sun.proxy.$Proxy151.query(Unknown Source)
            at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:147)
            ... 85 common frames omitted
    Caused by: java.sql.SQLRecoverableException: IO Error: Connection reset
            at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:498)
            at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:553)
            at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:254)
            at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
            at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:528)
            at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:136)
            at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:369)
            at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:198)
            at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:467)
            at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:541)
            at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115)
            at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112)
            at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:157)
            at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:115)
            at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:78)
            ... 97 common frames omitted
    Caused by: java.net.SocketException: Connection reset
            at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:115)
            at java.net.SocketOutputStream.write(SocketOutputStream.java:155)
            at oracle.net.ns.DataPacket.send(DataPacket.java:210)
            at oracle.net.ns.NetOutputStream.flush(NetOutputStream.java:230)
            at oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:321)
            at oracle.net.ns.NetInputStream.read(NetInputStream.java:268)
            at oracle.net.ns.NetInputStream.read(NetInputStream.java:190)
            at oracle.net.ns.NetInputStream.read(NetInputStream.java:107)
            at oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124)
            at oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80)
            at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1137)
            at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:350)
            at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
            at oracle.jdbc.driver.T4CTTIoauthenticate.doOSESSKEY(T4CTTIoauthenticate.java:407)
            at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:416)
            ... 111 common frames omitted
    

    原因:连接ORACLE服务器,客户端要生成随机密钥用于客户端认证,JDK默认使用/dev/random,random采用阻塞方式生成随机数,生成的速度很慢,ORACLE服务器会主动reset,并在alert.log中报错:
    TNS-12535: TNS:operation timed out
    ns secondary err code: 12606
    nt main err code: 0
    nt secondary err code: 0
    nt OS err code: 0
    Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.6.21)(PORT=33460))
    WARNING: inbound connection timed out (ORA-3136)

    解决方法:

        方法1:编辑$JAVA_HOME/jre/lib/security/java.security
    将securerandom.source=file:/dev/random 改为file:/dev/urandom(urandom采用非阴塞式生成随机数,性能很好,不会产生超时)
         方法2:加启动参数:-Djava.security.egd=file:/dev/urandom 
    

    以上解决方案摘自:http://blog.sina.com.cn/s/blog_76c4136a0102yggp.html
    我用的是方法1解决的。

  • 相关阅读:
    appium 多线程还是多进程(转)
    清理不可用的模拟器
    ios-元素查看器安装
    Linux 一条命令杀死占用端口的所有进程
    appium 小程序自动化测试
    (转)MitmProxy+APPnium安装使用
    mysql死锁分析
    母线故障跳闸的处理方法(转载)
    电动葫芦使用注意事项(转载)
    三菱plc输出指示灯不亮怎么办(转载)
  • 原文地址:https://www.cnblogs.com/qlong8807/p/11719668.html
Copyright © 2020-2023  润新知