2016-07-30 2 views
3
내 응용 프로그램이 몇 시간 동안 실행 application.When 내 웹에서 봄 부팅, 스프링 JPA, MySQL을 사용하고

, 나는 항상 예외 아래에 있어요 : 나는 데이터베이스가 잘 실행되고 있는지 확인하신 후spring jpa에서 연결이 닫히면 데이터베이스를 다시 연결하는 방법은 무엇입니까?

2016-07-30 21:27:12.434 ERROR 13553 --- [http-nio-8090-exec-8] o.h.engine.jdbc.spi.SqlExceptionHelper : No operations allowed after connection closed. 
2016-07-30 21:27:12.434 WARN 13553 --- [http-nio-8090-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08003 
2016-07-30 21:27:12.434 ERROR 13553 --- [http-nio-8090-exec-5] o.h.engine.jdbc.spi.SqlExceptionHelper : No operations allowed after connection closed. 
2016-07-30 21:27:12.438 ERROR 13553 --- [http-nio-8090-exec-8] [.[.[.[.c.c.Go2NurseJerseyConfiguration] : Servlet.service() for servlet [com.cooltoo.config.Go2NurseJerseyConfiguration] in context with path [] threw exception [org.springframework.dao.DataAccessResourceFailureException: could not prepare statement; nested exception is org.hibernate.exception.JDBCConnectionException: could not prepare statement] with root cause 

java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. 
     at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3119) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3570) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3559) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4110) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2570) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2731) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2815) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2322) ~[mysql-connector-java-5.1.25.jar!/:na] 
     at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) ~[hibernate-core-4.3.11.Final.jar!/:4.3.11.Final] 

. 그때 봄 부팅 응용 프로그램을 다시 시작해야합니다. 문제가 무엇인지 어떻게 확인할 수 있습니까? 왜 데이터베이스 연결이 닫혔습니까? 그런 일이 발생하면 데이터베이스를 다시 연결할 수 있습니까? 다음은 내 application.properties입니다 :

spring.datasource.url=jdbc:mysql://192.168.99.100:3306/test?characterEncoding=utf8 
spring.datasource.username=admin 
spring.datasource.password=123456 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.datasource.max-active=150 

답변

5

이것은 MySQL의 일반적인 오류입니다.

1)

은 application.properties이를 추가하고이 어떻게되는지 :가 spring docother stackoverflow question에 자세히 설명되어 있습니다 testOnBorrow

spring.datasource.testOnBorrow=true 
spring.datasource.validationQuery=SELECT 1 

. 그러나 나는 스프링의 문서에서 validationQuery에 대한 참조를 찾을 수 없지만 그 트릭을 수행하는 것 같습니다.

spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 

이 솔루션은 또한 다른 유래에 했나요됩니다 : 여기 http://christoph-burmeister.eu/?p=2849

그는 당신의 application.properties이 추가 제안을 제안 당신이 testWhileIdle을 사용할 수 있습니다

2) 또는, 질문, 그것은 단지 받아 들여진 대답이 아니었지만, 일부를위한 해결책 인 것처럼 보입니다.

spring.datasource.testWhileIdle = true 
spring.datasource.validationQuery = SELECT 1 
spring.datasource.timeBetweenEvictionRunsMillis = 3600000 

편집 : 매우 완전한 답변이를 다루고 또 다른 stackoverflow question()

3)

이 경우, 그들은 또한 timeBetweenEvictionRunsMillis 추가