Você tem problemas com muitas conexões, o que leva à indisponibilidade de estabelecer novas conexões. A solução é bastante simples - você precisa configurar o pool de conexões (c3p0 é bastante popular) e especificar as conexões do pool.
Veja Como configurar a conexão c3p0 e também não se esqueça de incluir dependência