java - 关闭与数据库的连接并不会关闭所有连接

标签 java sql database-connection datasource

我的代码中存在与数据库的连接泄漏。 有趣的是,当我调试时,所有连接都成功关闭(或者当我执行 Thread.Sleep(100) 时)。但如果没有这一点,总会有一种联系存在! 你能告诉我这里出了什么问题吗?

ComboPooledDataSource dataSource = null;

        try {
            dataSource = dataSourceFactory.getDataSource(dbType, dbProps);


            dataSource.getConnection();

        } finally {
            if (dataSource != null)
            {
                try
                {
                    log.debug("validate() : Closing SQL connection pool");
                    DataSources.destroy(dataSource);
                    dataSource = null;
                    log.debug("validate() : SQL connection pool is closed");

                }
                catch (Exception e)
                {
                    log.error("validate() : Error closing data source", e);
                }
            }       
        }

最佳答案

我认为您的问题与 this question 有关关于C3P0。我想在 DataSources.destroy(dataSource) 之前使用 Thread.sleep(delay) 可以解决您的问题。我还猜测您通过检查 MySQL 日志知道某些连接完好无损。但是,除了您的情况之外,我建议手动关闭数据源之外的连接,这是每次使用它后都要执行的操作。所以我建议进行以下修改:

    ComboPooledDataSource dataSource = null;
    Connection connection = null;
    try {
        dataSource = dataSourceFactory.getDataSource(dbType, dbProps);
        // Get a connection from the datasource
        connection = dataSource.getConnection();
    } finally {
        if (connection!=null){
            connection.close();
        }
        if (dataSource != null) {
            try {
                log.debug("validate() : Closing SQL connection pool");
                DataSources.destroy(dataSource);
                dataSource = null;
                log.debug("validate() : SQL connection pool is closed");
            } catch (Exception e) {
                log.error("validate() : Error closing data source", e);
            }
        }       
    }

关于java - 关闭与数据库的连接并不会关闭所有连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5075824/

相关文章:

java - Map.put 和 Map.putAll 方法之间的区别?

java - 在带注释的方法上需要方法参数

php - 如何设置MySQL超时时间更长?

sql - 黑斑羚 : argument of type 'NoneType' is not iterable

java - 连接池中的 Tomcat-Mysql 连接在空闲时间后超时

java - 整个代码中未正确使用数据库连接池

同一台笔记本电脑上的 Mysql 连接不良

java - 如何在java中以正确的字符编码从给定的URL获取源代码?

java - jQuery ajax 使用 .html() 处理响应

javascript - 我正在进行在线测试,一切都完成了。但我的自动提交计时器不起作用。