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

Fechando conexões JDBC no pool


Ao usar o pool de conexões, deve-se fechar a conexão no final? Em caso afirmativo, o propósito do agrupamento não está perdido? E se não, como o DataSource sabe quando uma instância específica do Connection é liberada e pode ser reutilizada? Estou um pouco confuso sobre isso, qualquer indicação é apreciada.

Sim, certamente você também precisa fechar a conexão em pool. Na verdade, é um wrapper em torno da conexão real. Sob as cobertas, ele liberará a conexão real de volta à piscina. Cabe ainda ao pool decidir se a conexão real será realmente ser fechado ou ser reutilizado para um novo getConnection() ligar. Portanto, independentemente de você estar usando um pool de conexões ou não, você deve sempre feche todos os recursos JDBC em ordem inversa no finally bloco do try bloco onde você os adquiriu. No Java 7, isso pode ser ainda mais simplificado usando try-with-resources demonstração.

O método a seguir está próximo do padrão? Parece uma tentativa de obter uma conexão do pool e, se o DataSource não puder ser estabelecido, use o antigo DriverManager. Não temos certeza de qual parte está sendo executada em tempo de execução. Repetindo a pergunta acima, deve-se fechar a conexão saindo de tal método?

O exemplo é bastante assustador. Você só precisa pesquisar/inicializar o DataSource apenas uma vez durante a inicialização do aplicativo em algum construtor/inicialização de uma classe de configuração de banco de dados em todo o aplicativo. Em seguida, basta chamar getConnection() na mesma fonte de dados durante o resto da vida útil do aplicativo. Não há necessidade de sincronização nem verificações nulas.

Veja também: