0

工具:春季3.0,Hibernate的2.0,Java 6的的Java調度線程殺死數據庫

大多數類似的線程建議安裝缺少的庫,糾正配置文件等,但我的項目是工作完全正常。一個模塊正在創建問題

我想要做什麼:在應用程序啓動時創建一個線程。將用戶請求記錄到Web應用程序中,並將其放入隊列中。線程每60秒讀一次隊列並調用事務性方法來保持隊列。

數據結構:的ConcurrentLinkedQueue - 這被初始化一次,創建

定義的 init()

public class UserRequestLogger { 
    public void init() {   
     taskQueue = new ConcurrentLinkedQueue<Task>(); 
    } 

    // Doing something here and then add the task to the queue 
    // Tasks are added to the Queue from time to time. (depends of user inputs) 
    taskQueue.add(task); 

} 

線程

<bean id="userRequestLogger" class="com.emumba.sample.util.requestlog.UserRequestLogger" init-method="init"> 

bean時:在另一類,線程預定在60秒的固定時間間隔後執行

public void periodFunc() { 

    private static final ScheduledExecutorService scheduler = Executors 
     .newSingleThreadScheduledExecutor(); 

    final Runnable periodicTask = new Runnable() { 

     @Override 
     public void run() { 
      logger.info("Time's up!"); 

      userRequestLogManager.save(); 
     }   
    }; 

    final ScheduledFuture<?> taskHandler = scheduler.scheduleAtFixedRate(
      periodicTask, 60, 60, TimeUnit.SECONDS); 
} 

持久性:的save()

@Service 
@Transactional 
public class UserRequestLogManager extends 

public void save() { 

    ConcurrentLinkedQueue<Task> taskQueue = getTaskQueue(); 

    logger.info("Thread started - Name: "+ Thread.currentThread().getName()); 

    while(taskQueue != null && !taskQueue.isEmpty()) { 
     Task task = taskQueue.poll(); 

     if (task != null) { 
      dao.persist(task); 
     } 
    } 
... 
} 

應用程序了日誌定義:

2013-06-03 16:35:59,928 [pool-18-thread-1] INFO com.emumba.sample.util.requestlog.UserRequestLogThreadLifeCycleHandler - Time's up! 
2013-06-03 16:35:59,928 [pool-18-thread-1] INFO com.emumba.sample.business.UserRequestLogManager - Thread started - Name: pool-18-thread-1 
... 
... 

應用程序運行wihtout本地機器上的任何問題,但在服務器上(亞馬遜AWS bitnami tomcatstack)幾個小時後應用程序。無法訪問數據庫(MySQL)。明顯地,MySQL死亡。這可能是因爲有太多的孤兒關係或某些事情,但我還沒有弄清楚。

mysql -u root -p產生這個錯誤ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2)

堆棧跟蹤:

2013-06-03 16:35:59,928 [pool-18-thread-1] INFO com.emumba.sample.util.requestlog.UserRequestLogThreadLifeCycleHandler - Time's up! 
2013-06-03 16:35:59,928 [pool-18-thread-1] INFO com.emumba.sample.business.UserRequestLogManager - Thread started - Name: pool-18-thread-1 
2013-06-03 16:36:59,942 [pool-18-thread-1] INFO com.emumba.sample.util.requestlog.UserRequestLogThreadLifeCycleHandler - Time's up! 
2013-06-03 16:37:29,940 [pool-18-thread-1] ERROR org.hibernate.transaction.JDBCTransaction - JDBC begin failed 
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 86,892 milliseconds ago. The last packet sent successfully to the server was 27,333 milliseconds ago. 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:411) 
     at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3090) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2979) 
     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3520) 
     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990) 
     at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151) 
     at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619) 
     at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4997) 
     at com.mchange.v2.c3p0.impl.NewProxyConnection.setAutoCommit(NewProxyConnection.java:881) 
     at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:87) 
     at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
     at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60) 
     at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70) 
     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:332) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
     at com.emumba.sample.business.UserRequestLogManager$$EnhancerByCGLIB$$306c3b43.save(<generated>) 
     at com.emumba.sample.util.requestlog.UserRequestLogThreadLifeCycleHandler$1.run(UserRequestLogThreadLifeCycleHandler.java:54) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
     at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) 
     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180) 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: 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:2540) 
     at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2990) 
     ... 28 more 
2013-06-04 07:16:28,273 [http-bio-8181-exec-8] ERROR org.hibernate.util.JDBCExceptionReporter - Connections could not be acquired from the underlying database! 
2013-06-04 07:16:41,631 [http-bio-8181-exec-8] ERROR com.emumba.sample.web.DefaultExceptionHandler - org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection 
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:382) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
     at com.emumba.sample.business.ref.EntityRefManager$$EnhancerByCGLIB$$39d59864.findAll(<generated>) 
     at com.emumba.sample.web.DefaultController.showHome(DefaultController.java:106) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     at java.lang.reflect.Method.invoke(Method.java:597) 
     at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
     at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215) 
     at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148) 
     at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:1225) 
     at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:63) 
     at org.springframework.orm.jpa.DefaultJpaDialect.beginTransaction(DefaultJpaDialect.java:70) 
     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:332) 
     ... 67 more 
Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140) 
     at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) 
     at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) 
     at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) 
     at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
     at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:160) 
     at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:81) 
     at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1473) 
     at org.hibernate.ejb.TransactionImpl.begin(TransactionImpl.java:60) 
     ... 69 more 
Caused by: java.sql.SQLException: Connections could not be acquired from the underlying database! 
     at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
     at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
     at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:71) 
     at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
     ... 74 more 
Caused by: com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source. 
     at com.mchange.v2.resourcepool.BasicResourcePool.awaitAvailable(BasicResourcePool.java:1319) 
     at com.mchange.v2.resourcepool.BasicResourcePool.prelimCheckoutResource(BasicResourcePool.java:557) 
     at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:477) 
     at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525) 
     ... 77 more 
2013-06-04 07:17:33,817 [http-bio-8181-exec-8] ERROR org.hibernate.util.JDBCExceptionReporter - Connections could not be acquired from the underlying database! 
2013-06-04 07:17:33,830 [http-bio-8181-exec-8] ERROR org.springframework.web.servlet.DispatcherServlet - HandlerInterceptor.afterCompletion threw exception 
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:382) 
     at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
     at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:335) 
     at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105) 
     at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
     at com.emumba.sample.business.UserSessionLogManager$$EnhancerByCGLIB$$34901c50.getActiveUserSessionLog(<generated>) 
     at com.emumba.sample.util.requestlog.UserRequestLogger.log(UserRequestLogger.java:81) 
     at com.emumba.sample.interceptor.UserRequestLogInterceptor.afterCompletion(UserRequestLogInterceptor.java:53) 
     at org.springframework.web.servlet.DispatcherServlet.triggerAfterCompletion(DispatcherServlet.java:1108) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:830) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
     at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593) 
     at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530) 
     at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:954) 
     at org.apache.jsp.WEB_002dINF.jsp.exception_jsp._jspService(exception_jsp.java:124) 
     at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) 
     at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
     at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684) 
     at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471) 
     at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402) 
     at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329) 
     at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:238) 
     at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250) 
     at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047) 
     at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817) 
     at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) 
     at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:574) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
     at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:112) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113) 
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Cannot open connection 
     at .... 

我希望這是有道理的。

+0

你不發表您的DAO的代碼。它使用連接池嗎?如果沒有,是否爲每個持久性任務使用新的連接?如果是的話,它是關閉這些連接? – lreeder

+0

@Ireeder我無法在文本中添加任何內容,因此將它放在評論中。 'DAO' '@PersistenceContext public EntityManager em; ... \t公共序列化的堅持(T實體){ \t \t如果(實體== NULL){ \t \t \t拋出新拋出:IllegalArgumentException( 「不能堅持空實體。」); \t \t} \t \t em.persist(entity); \t \t return entity.getId(); \t}' 這裏有一些JPA Transacation管理器配置 '的 ... ' – Ali

+0

我使用** C3P0 **數據源' Ali

回答

1

首先,請求是否以如此高的速率進入,以至於定期運行永遠不會退出輪詢隊列?

其次,你確定你沒有發射多個後臺線程來處理隊列嗎?

第三,確保連接池大小足夠大。

第四,在獲取數據庫例外情況以查看有多少線程實際競爭JDBC連接時使用JVM線程轉儲, JVisualVM進行配置。

+0

我如何確保只創建一個線程? – Ali

+1

您可以在periodFunc方法中註冊週期性任務,其中是否調用?此外,您已經創建了save()方法@Transactional,並且您正在循環它。這可能會造成冗長/大量的交易。添加一些日誌記錄來查看後臺線程的行爲。另外,你是否考慮過我在答案中提出的第一點? – Jukka

+0

''periodFunc'方法用'@PostConstruct public void periodFunc()'註解,所以它只會在應用程序加載時調用一次。請記住,線程將在60秒後定期運行,讀取隊列('.poll()')並保存數據。 – Ali

0

好的,這裏是我們如何以一種整潔的方式解決問題。我們沒有手動啓動任何線程,而是使用Spring提供的任務執行和調度。這裏有一個很好的解釋http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html和這裏的幾個例子http://www.mkyong.com/spring/spring-and-java-thread-example/

我們還使用@Async來運行我們的方法異步像

@Async 
public void persistAsync(UserRequestLog userRequestLog) { 
    this.persist(userRequestLog); 
} 

希望它可以幫助別人