2017-10-12 9 views
0

しばらく時間(6〜12時間)後にDataAccessResourceFailureExceptionとJDBCConnectionExceptionが発生するので、私が持っているマイクロサービスを再起動する必要があります。私は春のデータを使用していますし、DBは、AWS RDSJDBCConnectionExceptionが春のデータとアマゾンで時々発生するRDS

ここで私はspring.datasource.dbcp2.validation-query= SELECT 1 spring.datasource.dbcp2.test-while-idle= true spring.datasource.dbcp2.test-on-borrow= true spring.datasource.dbcp2.time-between-eviction-runs-millis= 5000

[E] s.s.s.TaskUtils$LoggingErrorHandler: Unexpected error occurred in scheduled task. 
org.springframework.dao.DataAccessResourceFailureException: could not prepare statement; nested exception is org.hibernate.exception.JDBCConnectionException: could not prepare statement 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:257) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:488) 
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) 
    at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 
Caused by: org.hibernate.exception.JDBCConnectionException: could not prepare statement 
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:48) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:148) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed. 
    at sun.reflect.GeneratedConstructorAccessor80.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
    at com.mysql.jdbc.Util.getInstance(Util.java:408) 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 39,231,404 milliseconds ago. The last packet sent successfully to the server was 39,231,405 milliseconds ago. is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) 
Caused by: java.net.SocketException: Connection timed out (Write failed) 
    at java.net.SocketOutputStream.socketWrite0(Native Method) 
    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) 
    at java.net.SocketOutputStream.write(SocketOutputStream.java:153) 
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) 
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) 

答えて

0

DataAccessResourceFailureException問題

解決するだろうと思った私の設定ファイルの抜粋だある - > データアクセス例外がスローされたが、例えば、JDBCを使ってデータベースに接続できない場合など、リソースが完全に失敗した場合。私の疑惑は、Connectionによってエラーが発生していることです。

RDSのログを確認してください。

また、私がログから理解するものは、MySQLNonTransientConnectionExceptionです。これは、タイムアウト後にプールからの接続が切断されるためです。

タイムアウト、脱退時間をより多く設定することをお勧めします。しかし、あなたのアプリケーションがやっていることは正しいですし、より大きなタイムアウトやエビクションタイムを持つことはお勧めしません。

+0

https://stackoverflow.com/questions/2297356/mysqlnontransientconnectionexception-in-jdbc-program-at-run-timeこの質問はあなたの質問に正確に答えます。 – venkatReddi

関連する問題