2016-12-23 2 views
1

스프링 부트 애플리케이션에서 MySQL에 연결하는 데 문제가 있습니다. 배포 후 몇 시간 동안 제대로 작동합니다. 나는 내 옆에서 (주로 밤에) 모든 활동을 중지 할 때 서버는 다음과 같은 예외를 제외하고 해당 될MySQL과 스프링 부트 : 일정 시간 동안 사용하지 않으면 연결이 끊어집니다.

org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed: 
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:427) 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:276) 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655) 
    at com.trammellventures.btd.services.user.UserService$$EnhancerBySpringCGLIB$$7e8f85.getAdminAccount(<generated>) 
    at com.trammellventures.btd.services.email.EmailCommonService.informAdminAboutTickerDefect(EmailCommonService.java:102) 
    at com.trammellventures.btd.services.email.EmailCommonService$$FastClassBySpringCGLIB$$bec6b855.invoke(<generated>) 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor$1.call(AsyncExecutionInterceptor.java:115) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.persistence.PersistenceException: org.hibernate.TransactionException: JDBC begin transaction failed: 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1763) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) 
    at org.hibernate.jpa.spi.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1771) 
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:64) 
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.beginTransaction(HibernateJpaDialect.java:170) 
    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:380) 
    ... 15 common frames omitted 
Caused by: org.hibernate.TransactionException: JDBC begin transaction failed: 
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:76) 
    at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:162) 
    at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1471) 
    at org.hibernate.jpa.internal.TransactionImpl.begin(TransactionImpl.java:61) 
    ... 17 common frames omitted 
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 
> 
The last packet successfully received from the server was 33 715 694 milliseconds ago. The last packet sent successfully to the server was 2 milliseconds ago. 
    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:422) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:981) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3465) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3365) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3805) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) 
    at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4874) 
    at sun.reflect.GeneratedMethodAccessor127.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at org.apache.tomcat.jdbc.pool.ProxyConnection.invoke(ProxyConnection.java:126) 
    at org.apache.tomcat.jdbc.pool.JdbcInterceptor.invoke(JdbcInterceptor.java:108) 
    at org.apache.tomcat.jdbc.pool.DisposableConnectionFacade.invoke(DisposableConnectionFacade.java:81) 
    at com.sun.proxy.$Proxy99.setAutoCommit(Unknown Source) 
    at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.doBegin(JdbcTransaction.java:72) 
    ... 20 common frames omitted 
Caused by: java.net.SocketException: Software caused connection abort: recv failed 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) 
    at java.net.SocketInputStream.read(SocketInputStream.java:170) 
    at java.net.SocketInputStream.read(SocketInputStream.java:141) 
    at com.mysql.jdbc.util.ReadAheadInputStream.fill(ReadAheadInputStream.java:100) 
    at com.mysql.jdbc.util.ReadAheadInputStream.readFromUnderlyingStreamIfNecessary(ReadAheadInputStream.java:143) 
    at com.mysql.jdbc.util.ReadAheadInputStream.read(ReadAheadInputStream.java:173) 
    at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:2954) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3375) 
    ... 34 common frames omitted 

내 application.properties 파일은 매우 간단하다 :

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydb 
spring.datasource.username=test 
spring.datasource.password=test 
spring.datasource.driver-class-name=com.mysql.jdbc.Driver 
spring.jpa.hibernate.ddl-auto=none 

나는 그것을한다고 가정 MySQL 연결 시간 초과 (기본값은 내가 잘못하지 않은 경우 8 시간)와 연결할 수 있습니다. 내가 맞습니까? 이 상황에 대한 해결책을 제게 제공해 줄 수 있습니까? 미리 감사드립니다!

답변

1

다음 속성을 추가하여 연결이 영구적인지 확인할 수 있습니다. 이 당신에게 Connection to Db dies after >4<24 in spring-boot jpa hibernate

을 도움이된다면

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

또한 귀하의 재산 키 Spring-Boot.1.4-Changelog 찾아 봄 부팅 1.4에 대한 계정에 속성 변경 로그를 확인하시기 바랍니다 참조 :

spring.datasource.dbcp.test-while-idle=true 
spring.datasource.dbcp.time-between-eviction-runs-millis=3600000 
spring.datasource.dbcp.validation-query=SELECT 1 

이러한 모든 속성과 그들의 구성 의미는 여기에서 찾을 수 있습니다 https://commons.apache.org/proper/commons-dbcp/configuration.html

관련 문제