有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java关闭到DB的连接不会关闭所有连接

我的代码中有到DB的连接泄漏。 有趣的是,当我调试时,所有连接都被成功关闭(或者当我执行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);
                }
            }       
        }

共 (1) 个答案

  1. # 1 楼答案

    我认为你的问题与C3P0有关。我想Thread.sleep(delay)之前的DataSources.destroy(dataSource)解决了你的问题。我还猜想您知道,在检查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);
                }
            }       
        }