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

Não é possível conectar-se ao banco de dados após alguns momentos de implantação no servidor


Em suas propriedades de configuração, você usou a propriedade c3p0 maxIdleTime, mas as propriedades c3p0 são configuradas usando c3p0. prefixo ou hibernate.c3p0. . Observe que ativar qualquer um dos c3p0 properties habilita automaticamente o provedor de conexão correspondente por heurística de hibernação. No log não é visto que você está usando c3p0. Se você não tiver fontes de dados configuradas, o Hibernate usará hibernate.connection.provider_class org.hibernate.connection.DriverManagerConnectionProvider . Este provedor de conexão possui um pool de conexão rudimentar embutido para o qual você pode definir um hibernate.connection.pool_size , mas é usado apenas para fins de desenvolvimento. Nunca use no ambiente de produção.

Você pode ter discussões intermináveis ​​sobre o tópico How to fix java.net.SocketException:Broken pipe . Depois de algum tempo, você perceberá que permaneceu aberto conexões no pool, que são repentinamente fechadas do outro lado pelos seguintes motivos:
  • Firewalls ou roteadores podem bloquear conexões ociosas (o protocolo cliente/servidor MySQL não funciona).
  • O MySQL Server pode estar fechando conexões ociosas que excedem o wait_timeout ou interactive_timeout limite.

Para ajudar a solucionar esses problemas, as dicas a seguir podem ser usadas:
  • É usada uma versão recente (5.1.13+) do driver JDBC.
  • Certifique-se de que wait_timeout e interactive_timeout estão suficientemente altos. Verifique se interactiveClient é usado.
  • Certifique-se de que tcpKeepalive está ativado.
  • Certifique-se de que qualquer configuração configurável de tempo limite de firewall ou roteador permita o tempo máximo de inatividade de conexão esperado.
  • Certifique-se de que as conexões sejam válidas quando usadas no pool de conexões. Use uma consulta que comece com /* ping */ para executar um ping leve em vez de uma consulta completa. Observe que a sintaxe do ping precisa ser exatamente como especificada aqui.
  • Valide explicitamente a conexão antes de usá-la se a conexão tiver ficado inativa por um longo período de tempo.
  • Minimize a duração de um objeto de conexão que fica ocioso enquanto outra lógica de aplicativo é executada.

Para cumprir algumas dessas opções, é melhor usar um pool de conexões que você pode usar com o Hibernate. O Hibernate tem suporte para commons-dbcp, c3p0 e proxool. Além disso, você pode configurar a fonte de dados JNDI no servidor da Web para usar com hibernação, pois possui um pool de conexões. Consulte o Capítulo 7 Pool de conexões com conector/J .

Se você gosta de configurar o Hibernate com c3p0, leia este Como configurar o pool de conexão C3P0 . Para configuração de exemplo dbcp, você deve verificar esta postagem MySQL, Hibernate and Broken Pipe Exception . Qualquer pool de conexão que você usará depende de você.