0
点赞
收藏
分享

微信扫一扫

(druid连接池)Connection timed out (Write failed)

像小强一样活着 2022-01-30 阅读 132
java

使用阿里链接池报以下错误

[data-tower:10.157.196.228:8400] 2022-01-26 03:13:24.733 INFO 32231 [db4b2033c07741ce9d67e4640a18275b] [http-nio-8400-exec-3] org.mongodb.driver.connection            Opened connection [connectionId{localValue:5, serverValue:215}] to 10.157.196.228:27017
[data-tower:10.157.196.228:8400] 2022-01-26 03:13:24.766 INFO 32231 [6e61797d960b44fe8f66c6d2c21098fb] [http-nio-8400-exec-4] org.mongodb.driver.connection            Opened connection [connectionId{localValue:6, serverValue:216}] to 10.157.196.228:27017
[data-tower:10.157.196.228:8400] 2022-01-26 21:50:02.226 INFO 32231 [99b4549a6d7445f282af3fe3dd1c173f] [http-nio-8400-exec-10] c.y.tower.commons.handler.DataSetHelper  ++++++++++++++++开始新增数据+++++++++++++++++1643251802226
[data-tower:10.157.196.228:8400] 2022-01-26 21:50:02.226 INFO 32231 [99b4549a6d7445f282af3fe3dd1c173f] [http-nio-8400-exec-10] c.y.tower.commons.handler.DataSetHelper  ++++++++++打印sql+++++++++++++INSERT [smartallocation].[web_factor] (task_id,factor_name,factor_value) SELECT N'1486531916737060926',N'po_fill_rate','0,1'UNION ALL SELECT N'1486531916737060926',N'osa','0,0.94'UNION ALL SELECT N'1486531916737060926',N'retail_doi','0,988'UNION ALL SELECT N'1486531916737060926',N'wh_doi','-0.03,155532'UNION ALL SELECT N'1486531916737060926',N'startDate','202101'UNION ALL SELECT N'1486531916737060926',N'endDate','202112'UNION ALL SELECT N'1486531916737060926',N'natural_sales','100'UNION ALL SELECT N'1486531916737060926',N'status','A,B'
[data-tower:10.157.196.228:8400] 2022-01-26 21:50:02.232 ERROR 32231 [99b4549a6d7445f282af3fe3dd1c173f] [http-nio-8400-exec-10] c.y.tower.commons.handler.DataSetHelper  数据批量操作失败:com.microsoft.sqlserver.jdbc.SQLServerException: Connection timed out (Write failed)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1654)
	at com.microsoft.sqlserver.jdbc.TDSChannel.write(IOBuffer.java:1805)
	at com.microsoft.sqlserver.jdbc.TDSWriter.flush(IOBuffer.java:3581)
	at com.microsoft.sqlserver.jdbc.TDSWriter.writePacket(IOBuffer.java:3482)
	at com.microsoft.sqlserver.jdbc.TDSWriter.endMessage(IOBuffer.java:3062)
	at com.microsoft.sqlserver.jdbc.TDSCommand.startResponse(IOBuffer.java:6120)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteStatementBatch(SQLServerStatement.java:876)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.access$200(SQLServerStatement.java:37)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement$StmtBatchExecCmd.doExecute(SQLServerStatement.java:836)
	at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
	at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
	at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeBatch(SQLServerStatement.java:1706)
	at com.alibaba.druid.pool.DruidPooledStatement.executeBatch(DruidPooledStatement.java:792)
	at com.yechtech.tower.commons.handler.DataSetHelper.updateBathByStatement(DataSetHelper.java:218)
	at com.yechtech.tower.service.impl.StrategyFactorServiceImpl.commitToSqlserve(StrategyFactorServiceImpl.java:251)
	at com.yechtech.tower.service.impl.StrategyFactorServiceImpl$$FastClassBySpringCGLIB$$444183d.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
	at com.yechtech.tower.service.impl.StrategyFactorServiceImpl$$EnhancerBySpringCGLIB$$c1b245f6.commitToSqlserve(<generated>)
	at com.yechtech.tower.service.impl.ITaskServiceImpl.toSubmitSingleStrategy(ITaskServiceImpl.java:243)
	at com.yechtech.tower.service.impl.ITaskServiceImpl.sumitTask(ITaskServiceImpl.java:225)
	at com.yechtech.tower.service.impl.ITaskServiceImpl$$FastClassBySpringCGLIB$$9a646efd.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:687)
	at com.yechtech.tower.service.impl.ITaskServiceImpl$$EnhancerBySpringCGLIB$$4c9f8236.sumitTask(<generated>)
	at com.yechtech.tower.web.controller.TaskHistoryController.submitTask(TaskHistoryController.java:138)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect
  • 原来代码
    public static Connection getConn() {
        String url = "*****";
        String driver = "*****";
        String username = "*****";
        String password = "*****";
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl(url);
        ds.setDriverClassName(driver);
        ds.setUsername(username);
        ds.setPassword(password);
        ds.setMaxWait(30000);
        ds.setRemoveAbandonedTimeout(1800);
        ds.setInitialSize(1);
        ds.setMinIdle(10);
        ds.setMaxActive(20);
        ds.setMinEvictableIdleTimeMillis(300000);
        //不论用户选择的是自动提交或者是不是自动提交,默认都是不自动提交
        ds.setDefaultAutoCommit(false);
        DruidPooledConnection connection = null;
        try {
             connection = ds.getConnection();
        } catch (SQLException e) {
            log.error("db error info {}", ExceptionUtil.stacktraceToString(e));
            throw TowerExceptions.badRequest(DvErrCode.CONNECTION_ERROR.getMessage());
        }
        return connection;
    }
  • 经过分析 链接池有个检测链接有效性的属性默认是关闭的 (testOnBorrow=false),但是如果要打开,会影响性能。
  • 修改之后的代码
public static Connection getConn() {
        String url = "*****";
        String driver = "*****";
        String username = "*****";
        String password = "*****";
        DruidDataSource ds = new DruidDataSource();
        ds.setUrl(url);
        ds.setDriverClassName(driver);
        ds.setUsername(username);
        ds.setPassword(password);
        ds.setMaxWait(30000);
        ds.setRemoveAbandonedTimeout(1800);
        ds.setInitialSize(1);
        ds.setMinIdle(10);
        ds.setMaxActive(20);
        ds.setMinEvictableIdleTimeMillis(300000);
        //不论用户选择的是自动提交或者是不是自动提交,默认都是不自动提交
        ds.setDefaultAutoCommit(false);
        //无用的链接实例remove
        ds.setRemoveAbandoned(Boolean.TRUE);
        //检测有效性
        ds.setTestOnBorrow(Boolean.FALSE);
        //配置间隔多久启动一次DestroyThread,对连接池内的连接才进行一次检测,单位是毫秒。
        // 检测时:1.如果连接空闲并且超过minIdle以外的连接,如果空闲时间超过minEvictableIdleTimeMillis设置的值则直接物理关闭。
        //2.在minIdle以内的不处理。
        ds.setTimeBetweenEvictionRunsMillis(600000);
        //设置从连接池获取连接时是否检查连接有效性,true时,如果连接空闲时间超过minEvictableIdleTimeMillis进行检查,否则不检查;false时,不检查
        ds.setTestWhileIdle(Boolean.TRUE);
        DruidPooledConnection connection = null;
        try {
             connection = ds.getConnection();
        } catch (SQLException e) {
            log.error("db error info {}", ExceptionUtil.stacktraceToString(e));
            throw TowerExceptions.badRequest(DvErrCode.CONNECTION_ERROR.getMessage());
        }
        return connection;
    }
  • 为什么不打开有效性链接呢, 这篇文章写的很好 关于testOnBorrow=false的解析
举报

相关推荐

0 条评论