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

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:Nenhuma operação permitida após o fechamento da conexão


Como @swanliu apontou, é devido a uma conexão ruim.
No entanto, antes de ajustar o tempo do servidor e o tempo limite do cliente, eu tentaria primeiro usar uma estratégia de pool de conexão melhor.

Agrupamento de conexões


O próprio Hibernate admite que sua estratégia de pool de conexões é mínima

Eu pessoalmente uso C3P0 . no entanto, existem outras alternativas disponíveis, incluindo DBCP .
Confira

Abaixo está uma configuração mínima do C3P0 usada na minha aplicação:
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="c3p0.acquire_increment">1</property> 
<property name="c3p0.idle_test_period">100</property> <!-- seconds --> 
<property name="c3p0.max_size">100</property> 
<property name="c3p0.max_statements">0</property> 
<property name="c3p0.min_size">10</property> 
<property name="c3p0.timeout">1800</property> <!-- seconds --> 

Editar:
Atualizei o arquivo de configuração (Referência ), pois acabei de copiar e colar o do meu projeto anterior. O tempo limite deve resolver o problema idealmente. Se isso não funcionar para você, há uma solução cara que eu acho que você poderia dar uma olhada:


Crie um arquivo “c3p0.properties” que deve estar na raiz do classpath (ou seja, não há como substituí-lo por partes específicas do aplicativo). (Referência )
# c3p0.properties
c3p0.testConnectionOnCheckout=true

Com esta configuração cada conexão é testada antes de ser usada. No entanto, pode afetar o desempenho do site.