您的位置:首页 > 新闻 > 热点要闻 > 校园网页设计模板_品牌设计作品集_今日头条搜索引擎_网站排名怎么优化

校园网页设计模板_品牌设计作品集_今日头条搜索引擎_网站排名怎么优化

2025/2/24 8:41:32 来源:https://blog.csdn.net/u014618954/article/details/145596585  浏览:    关键词:校园网页设计模板_品牌设计作品集_今日头条搜索引擎_网站排名怎么优化
校园网页设计模板_品牌设计作品集_今日头条搜索引擎_网站排名怎么优化

> Druid版本:v1.2.18

最近项目中经常出现:com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 120000, active 0, maxActive 128, creating 0, createErrorCount 2,但是其他平台连接这个数据源正常的
于是做了一个实验复现了这个问题:
1. 先搞一个案例一直拿连接执行
2. 中途关闭数据库模拟网络问题或者数据库服务繁忙的情况 net stop mysql
3. 然后复现了GetConnectionTimeoutException的情况
4. 再开启数据库发现数据库连接没有恢复 net start mysql

解决办法:
 //开启这两个配置就能实现断开重连了,如果没生效尝试升级一下版本1.2.16+
  druidDataSource.setBreakAfterAcquireFailure(false);
  druidDataSource.setKeepAlive(true);


```java

public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        pro.setProperty(DruidDataSourceFactory.PROP_DRIVERCLASSNAME, "com.mysql.cj.jdbc.Driver");
        pro.setProperty(DruidDataSourceFactory.PROP_URL, "jdbc:mysql://localhost:3306/xxx?useCursorFetch=true");
        pro.setProperty(DruidDataSourceFactory.PROP_USERNAME, "root");
        pro.setProperty(DruidDataSourceFactory.PROP_PASSWORD, "123456");
        pro.setProperty(DruidDataSourceFactory.PROP_MAXWAIT, "120000");
        pro.setProperty(DruidDataSourceFactory.PROP_MAXACTIVE, "16");
        pro.setProperty(DruidDataSourceFactory.PROP_VALIDATIONQUERY, "select 1");
        DruidDataSource druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(pro);
        druidDataSource.setConnectionErrorRetryAttempts(0);
        druidDataSource.setConnectTimeout(10*1000);
        druidDataSource.setSocketTimeout(90*1000);
        druidDataSource.setRemoveAbandoned(true);

        //开启这两个配置就能实现断开重连了,如果没生效尝试升级一下版本1.2.16+
        druidDataSource.setBreakAfterAcquireFailure(false);
        druidDataSource.setKeepAlive(true);
        druidDataSource.init();

        new Thread(() -> {
            for (int i = 0; i < 10000; i++) {
                try {
                    DruidPooledConnection connection = druidDataSource.getConnection();
                    Statement statement = connection.createStatement();
                    ResultSet resultSet = statement.executeQuery("select * from xxx");
                    while (resultSet.next()) {
                        System.out.println(resultSet.getString("id"));
                    }
                    resultSet.close();
                    statement.close();
                    connection.close();
                    Thread.sleep(1000);
                }catch (Exception e){
                    log.error("error", e);
                }

            }
        }).start();
        Thread.sleep(30000000);
    }
```

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com