Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Estou usando Java PooledConnections corretamente?


Este não é o caminho certo. A fonte de dados precisa ser gerenciada por qualquer contêiner em que você esteja executando o aplicativo. O MysqlConnectionPoolDataSource é não um pool de conexões. É apenas uma implementação concreta do javax.sql.DataSource interface. Você normalmente o define no contexto JNDI e o obtém de lá. Além disso, o próprio MySQL declara tudo explicitamente em sua documentação .

Agora, como usá-lo depende da finalidade do aplicativo. Se for um aplicativo da web, você precisa consultar a documentação de recursos JNDI do servletcontainer/appserver em questão. Se for, por exemplo, o Tomcat, você pode encontrá-lo aqui . Se você estiver executando um aplicativo cliente -- para o qual eu questionaria muito o valor de um pool de conexão--, você precisa procurar uma estrutura de pool de conexão que possa usar a fonte de dados pool de conexão fornecida pelo MySQL, como C3P0 .

O outro problema com o código que você postou é que o PooledConnection#getConnection() retornará o subjacente conexão que, portanto, não uma conexão em pool. Chamar close nele não retornará a conexão com o pool, mas apenas o fechará. O pool tem que criar uma nova conexão toda vez.

Então a história de threadsafety, que depende do real estrutura de pool de conexão em questão. O C3P0 provou sua robustez em anos, você não se preocupa com isso, desde que escreva o código JDBC de acordo com o idioma padrão, ou seja, use somente as interfaces JDBC e adquirir e feche todos os recursos (Connection , Statement e ResultSet ) no menor escopo possível.