【发布时间】:2018-09-17 05:16:52
【问题描述】:
我创建了一个 Spring Boot 微服务并使用 Azure MS-SQL 作为数据库。 为了与数据库连接,我使用了带有以下配置的 spring-jpa
spring.datasource.url=jdbc:sqlserver://xxxxx:1433;databaseName=xxxx;encrypt=true;trustServerCertificate=false;hostNameInCertificate=*.database.windows.net;loginTimeout=30;
spring.datasource.username=xxx
spring.datasource.password=xxx
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.show_sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2012Dialect
每当调用数据库时,我会间歇性地出现以下异常,如果我在某个时间重试,则会自动发生这种异常
com.microsoft.sqlserver.jdbc.SQLServerException:
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError (SQLServerException.java190)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.checkClosed (SQLServerConnection.java388)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.getWarnings (SQLServerConnection.java2115)
at com.mchange.v2.c3p0.impl.NewProxyConnection.getWarnings (NewProxyConnection.java807)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings (SqlExceptionHelper.java274)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings (SqlExceptionHelper.java254)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection (LogicalConnectionManagedImpl.java170)
at org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.close (LogicalConnectionManagedImpl.java215)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.close (JdbcCoordinatorImpl.java193)
at org.hibernate.internal.SessionImpl.close (SessionImpl.java421)
at org.hibernate.jpa.internal.EntityManagerImpl.close (EntityManagerImpl.java145)
at sun.reflect.GeneratedMethodAccessor70.invoke
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java43)
at java.lang.reflect.Method.invoke (Method.java498)
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke (ExtendedEntityManagerCreator.java347)
at com.sun.proxy.$Proxy151.close
at org.springframework.orm.jpa.EntityManagerFactoryUtils.closeEntityManager (EntityManagerFactoryUtils.java438)
at org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor.afterCompletion (OpenEntityManagerInViewInterceptor.java111)
at org.springframework.web.servlet.handler.WebRequestHandlerInterceptorAdapter.afterCompletion (WebRequestHandlerInterceptorAdapter.java72)
at org.springframework.web.servlet.HandlerExecutionChain.triggerAfterCompletion (HandlerExecutionChain.java169)
at org.springframework.web.servlet.DispatcherServlet.processDispatchResult (DispatcherServlet.java1059)
at org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java984)
at org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java901)
at org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java970)
at org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java861)
at javax.servlet.http.HttpServlet.service (HttpServlet.java635)
at org.springframework.web.servlet.FrameworkServlet.service (FrameworkServlet.java846)
at javax.servlet.http.HttpServlet.service (HttpServlet.java742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal (ApplicationContextHeaderFilter.java55)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.web.filter.ShallowEtagHeaderFilter.doFilterInternal (ShallowEtagHeaderFilter.java110)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at com.microsoft.applicationinsights.web.internal.WebRequestTrackingFilter.doFilter (WebRequestTrackingFilter.java86)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at com.siemens.isb.lib.security.oauth.filter.RequestBasedInitializerFilter.doFilter (RequestBasedInitializerFilter.java33)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at com.siemens.isb.lib.security.oauth.filter.ExceptionHandlerFilter.doFilter (ExceptionHandlerFilter.java28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal (WebRequestTraceFilter.java110)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java317)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke (FilterSecurityInterceptor.java127)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter (FilterSecurityInterceptor.java91)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter (ExceptionTranslationFilter.java114)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.session.SessionManagementFilter.doFilter (SessionManagementFilter.java137)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter (AnonymousAuthenticationFilter.java111)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter (SecurityContextHolderAwareRequestFilter.java170)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter (RequestCacheAwareFilter.java63)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter (OAuth2AuthenticationProcessingFilter.java176)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter (LogoutFilter.java116)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal (HeaderWriterFilter.java64)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter (SecurityContextPersistenceFilter.java105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal (WebAsyncManagerIntegrationFilter.java56)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter (FilterChainProxy.java331)
at org.springframework.security.web.FilterChainProxy.doFilterInternal (FilterChainProxy.java214)
at org.springframework.security.web.FilterChainProxy.doFilter (FilterChainProxy.java177)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate (DelegatingFilterProxy.java347)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter (DelegatingFilterProxy.java263)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.web.filter.RequestContextFilter.doFilterInternal (RequestContextFilter.java99)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal (HttpPutFormContentFilter.java108)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java81)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.cloud.sleuth.instrument.web.TraceFilter.doFilter (TraceFilter.java164)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal (MetricsFilter.java106)
at org.springframework.web.filter.OncePerRequestFilter.doFilter (OncePerRequestFilter.java107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java166)
at org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java199)
at org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java504)
at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java140)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java81)
at org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java87)
at org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java342)
at org.apache.coyote.http11.Http11Processor.service (Http11Processor.java803)
at org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process (AbstractProtocol.java790)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun (NioEndpoint.java1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java49)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run (TaskThread.java61)
at java.lang.Thread.run (Thread.java748)
我已使用 c3p0 数据源进行连接,上述异常由 c3p0 记录如下
[c3p0] Another error has occurred [ com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed. ] which will not be reported to listeners!
请帮忙解决这个问题,以便顺利连接。
【问题讨论】:
-
看起来您的应用程序正在尝试使用(可能只是对
close())一个已经是close()d 的连接。问题是为什么。您在这里没有列出任何 c3p0 配置,但可能首先要尝试配置一些连接测试,最直接的方法是设置 c3p0 的testConnectionOnCheckout to true。初始化 DataSource 时,应将 c3p0 配置转储到 INFO 的日志中。您可以在那里查看是否设置了任何连接测试。
标签: spring-boot azure-sql-database c3p0