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:
- É seguro usar uma instância java.sql.Connection estática em um sistema multithread?
- Estou usando o pool de conexões JDBC?