Hibernate: problema com queda de conexão com o MySQL (ou qualquer banco)

7 respostas
K

Olá,

estou enfrentando o seguinte problema: temos em produção uma aplicação que acessa um banco de dados MySQL.

Tudo funciona a mil maravilhas, mas quando o tempo de espera por conexões do servidor supera o tempo máximo, e o MySQL fecha a conexão, a aplicação simplesmente não consegue restabelecê-la.

Toda a configuração de conexão é feita a partir do nosso arquivo de configuração do Spring, que anexo abaixo:

<property name="hibernateProperties">
    		<props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                    <prop key="hibernate.connection.driver_class">com.mysql.jdbc.Driver</prop>
                    
                    <prop key="hibernate.connection.url">jdbc:mysql://servidor/banco</prop>
                    <prop key="hibernate.connection.username">login</prop>                    
                    <prop key="hibernate.connection.password">senha</prop>
                    <prop key="hibernate.connection.autoReconnect">true</prop>
                    <!-- Configurações do pool -->
                    <prop key="c3p0.acquire_increment">1</prop> 
                    <prop key="c3p0.idle_test_period">60</prop> <!-- seconds --> 
                    <prop key="c3p0.max_size">50</prop> 
                    <prop key="c3p0.max_statements">100</prop> 
                    <prop key="c3p0.min_size">5</prop>         
                    <prop key="c3p0.timeout">60</prop> 
                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
	        </props>
    	</property>

Sendo assim, pergunto: há alguma coisa de errado com as minhas configurações de conexão? Como configuro o Hibernate para restabelecer a conexão caso a mesma seja fechada pelo sevidor? É possível?

7 Respostas

Z
S

Tenta diminuir o idle_test_period para algo abaixo do timeout do banco.

K

Eu já inclui a opção autoReconnect=true na minha string de conexão, mas infelizmente o problema persiste.

Então, estou tendo de tratar a excessão JDBConnectionException do Hibernate manualmente, o que não é lá a melhor das opções.

Alguém já passou por algo semelhante aqui?

Aliás, melhor ainda: há alguma opção de configuração do próprio Hibernate que me permita, nestes casos, fazer a reconexão com o banco de dados em caso de queda da conexão?

L

Use test-on-borrow, muito mais confiavel que idle_test_period

K

Qual a diferença? Como o configuro?

L

Qual a diferença? Como o configuro?

Com Test on Borrow, a conexão é verificada se está ok antes de ser devolvida para a aplicação. Idle Test Period faz pooling temporário para verificar se a conexão está ok, o que permite que conexões bichadas sejam devolvidas se não forem testadas a tempo.

Para saber como configurar consulte a documentação pois não tenho um exemplo a mão.

S

Diz a lenda que test-on-borrow é bem mais lento que idle-test-period…

Criado 12 de março de 2007
Ultima resposta 13 de mar. de 2007
Respostas 7
Participantes 4