Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro "Too many connections" no Hikaricp (pool)

Salve devs! Após algumas operações na aplicação (depósitos, transferências, etc), estoura uma exceção do Hikaricp "Too many connections". Setei o setMaximumPoolSize(25). O método que consulta as contas abertas pode ser chamado 7 vezes, na 8ª vez estoura a exceção com a msg "Too many connections". O método transferir executa 2 vezes, na 3ª vez a exceção já aparece.

Existe algum outro local que precise haver um fechamento de conexão além do conn.close() nos métodos da classe DAO?

Coloquei validações em todos os métodos da classe DAO ( if conn.isClosed() ) e todas as conexões estão fechando após a operação. Reposicionei os conn.close() para dentro de blocos Finally, conforme indicado na documentação do MySql, mas o erro continua.

Nem com ajuda do ChatGPT eu resolvi essa... kkk

Deixo aqui o link para o meu projeto, e agradeço a ajuda desde já.

https://github.com/tbsilveira/mybank/tree/main/src/main/java/com/mybank

1 resposta
solução!

Boa Tiago, obrigado por compartilhar.

Só um comentário: normalmente vc separa essa responsabilidade ... quero dizer uma coisa que executar os comandos SQL no DAO, outra coisa é abrir e fechar a conexão (repare que vc abre a conexão fora do DAO mas fecha dentro). Ou seja, melhor seria se vc abre e fecha a conexão fora do DAO.

Pensando nisso, o lugar mais "correto" seria no método da classe Service:

//o codigo abaixo deve usar try - catch - finally
public void createAccount(AccountDataRegister accountData){
    Connection conn = connectionFactory.getConnection();
    new AccountDAO(conn).create(accountData);
    conn.close(); //novo
}

No entanto, aqui eu poderia fazer o mesmo discurso: uma coisa é abrir a conta (createAccount) e outra coisa é cuida da conexão. Emfim, para resolver isso e realmente cuida da conexão de maneira correta (importante em aplicações reais) existem frameworks como o Spring que fazem a famosa Inversão de controle. O Spring vai cuidar e injetar a conexão onde precisar sem vc se preocupar com isso, ok?

abs