簡體   English   中英

關閉與數據庫的連接不會關閉所有連接

[英]Close connection to DB does not close all connections

我的代碼中數據庫連接泄漏。 有趣的是,當我調試時,所有連接都成功關閉(或者當我執行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);
                }
            }       
        }

我認為您的問題與有關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);
            }
        }       
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM