2016-07-30 4 views
3
私は自分のアプリケーションには、いくつかの時間のために実行されているapplication.When私のWebでのスプリングブーツ、春-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.datasource.testOnBorrow=true 
spring.datasource.validationQuery=SELECT 1 

testOnBorrowspring docこのother stackoverflow questionに詳述されています。私はしかし、validationQueryの春の文書で参照を見つけることができませんが、それはトリックを行うようです。

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

このソリューションは、他のstackoverflowのでmentionnedされています。ここhttp://christoph-burmeister.eu/?p=2849

彼はあなたのapplication.propertiesにこれを追加することを示唆していることを示唆として、あなたはtestWhileIdleを使用することができ

2)または、質問、それは受け入れられた答えではありませんでしたが、いくつかの解決策であるようです。

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

EDIT::非常に完全な答えでこれをカバー別stackoverflow question()

3)

は、この場合、彼らはまた、 timeBetweenEvictionRunsMillisを追加しました
関連する問題