как вернуть соединение в c3p0 - PullRequest
12 голосов
/ 22 апреля 2011

Я использую c3p0 - ComboPooledDataSource. Я инициализирую один раз, как показано ниже.

private void init() {
cpds = new ComboPooledDataSource();
cpds.setDriverClass(driverName);
cpds.setJdbcUrl(url);
cpds.setUser(userName);
cpds.setPassword(pwd);
}

Я получаю соединение из пула, как показано ниже

public synchronized Connection getLocalConnection(String ipAddr)
    throws SQLException {
return cpds.getConnection();
}

Но я не уверен, что это верный способ вернуть соединение обратно в пул, когда я закончу выполнение запроса. Я думаю,

conn.close()

просто возвращает соединение обратно в пул, а не ДЕЙСТВИТЕЛЬНО ЗАКРЫВАЕТ соединение. Я прав или есть другой путь? Просьба помочь.

1 Ответ

6 голосов
/ 22 апреля 2011

Это код инициализации

private DataSource init() {

    DataSource unpooled = DataSources.unpooledDataSource(DB_URL, DB_USERNAME, DB_PASSWORD);

    Map<String, Object> overrideProps = new HashMap<String, Object>();

    overrideProps.put("maxPoolSize", MAX_POOL_SIZE);
    overrideProps.put("minPoolSize", MIN_POOL_SIZE);

    return DataSources.pooledDataSource(unpooled, overrideProps);
}

И вы получаете соединение из источника данных.

public Connection getConnection() throws SQLException {
    return dataSource.getConnection();
}

А чтобы закрыть соединение, просто вызовите метод close ().

connection.close();
...