Para implementar o C3P0 da melhor maneira, verifique esta resposta
C3P0 :
Para aplicativos corporativos, o C3P0 é a melhor abordagem. O C3P0 é uma biblioteca fácil de usar para aumentar os drivers JDBC tradicionais (baseados no DriverManager) com DataSources vinculáveis a JNDI, incluindo DataSources que implementam o Connection and Statement Pooling, conforme descrito nas extensões jdbc3 spec e jdbc2 std. O C3P0 também tratou com segurança as desconexões de DB e as reconexões transparentes no currículo, enquanto o DBCP nunca recuperou conexões se o link foi retirado por baixo.
Portanto, é por isso que o c3p0 e outros conjuntos de conexões também prepararam caches de instruções - ele permite que o código do aplicativo evite lidar com tudo isso. As instruções geralmente são mantidas em algum pool limitado de LRU; portanto, instruções comuns reutilizam uma instância de PreparedStatement.
Pior ainda, o DBCP estava retornando objetos de Conexão para o aplicativo para o qual o transporte subjacente havia sido interrompido. Um caso de uso comum para c3p0 é substituir o conjunto de conexões DBCP padrão incluído no Apache Tomcat. Muitas vezes, um programador enfrenta uma situação em que as conexões não são recicladas corretamente no conjunto de conexões DBCP e o c3p0 é um substituto valioso nesse caso.
Nas atualizações atuais, o C3P0 possui alguns recursos brilhantes. estes são dados abaixo:
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setMinPoolSize();
dataSource.setMaxPoolSize();
dataSource.setMaxIdleTime();
dataSource.setMaxStatements();
dataSource.setMaxStatementsPerConnection();
dataSource.setMaxIdleTimeExcessConnections();
Aqui, máximo e mínimo poolsize definir limites de conexão que meios como mínima e máxima de conexão esta aplicação irá tomar. MaxIdleTime()
defina quando liberará a conexão inativa.
DBCP :
Essa abordagem também é boa, mas tem algumas desvantagens, como o tempo limite da conexão e a liberação da conexão. C3P0 é bom quando estamos usando projetos de leitura mútua. Em nossos projetos, usamos simultaneamente várias execuções de encadeamentos usando DBCP, e obtemos o tempo limite da conexão se usamos mais execuções de encadeamentos. Então fomos com a configuração c3p0. Eu não recomendaria o DBCP, especialmente a habilidade de lançar conexões para fora do pool quando o DB desaparecer, sua incapacidade de se reconectar quando o DB voltar e sua incapacidade de adicionar dinamicamente objetos de conexão de volta ao pool (ele fica suspenso para sempre uma leitura do soquete de E / S JDBCconnect pós)
Obrigado :)