Esse tipo de problema surge quando você NÃO fechando corretamente a conexão após o uso.
Nota:Se a JVM sair enquanto o código try ou catch estiver sendo executado, o bloco finally pode não ser executado. Da mesma forma, se o thread que executa o código try ou catch for interrompido ou eliminado, o bloco finally pode não ser executado mesmo que o aplicativo como um todo continue.
Como você pediu no comentário, adicionei o exemplo de código para demonstrar de forma prática!
Connection con = null
try{
//Establishing connection to datasource
con = DBConnection.getConnection();
//perform DB operations
...
...
...
}catch(SQLException sqlEx){
/*To catch any SQLException thrown during DB
*Operations and continue processing like sending alert to admin
*that exception occurred.
*/
}finally{
/*This block should be added to your code
* You need to release the resources like connections
*/
if(con!=null)
con.close();
}
Observe que a declaração de
Connection
variável deve estar no escopo adequado para fechá-la em finally
quadra. Espero que isto ajude!