首页 文章

从Spring MVC触发批处理作业的问题

提问于
浏览
0

我试图通过一个web url(Servlet / Spring MVC)触发一个批处理作业,当从主程序启动时它正常工作 . 当我启动Web服务器并点击url时,程序给我一个例外,即jobLauncher未解析 .

这是SO question,这非常接近我的要求,但我想看看我的当前方法是否得到纠正,然后转到那里也是多线程的建议(此时我并不是真的需要)

这是我完美的工作configurationbatch-configMain program . 我正在通过servlet here调用我的 Spring 季批次

11:02:37.201 [tomcat-http - 24] DEBUG osorm.jpa.JpaTransactionManager - 在事务11:02之后不关闭预先绑定的JPA EntityManager:37.202 [tomcat-http - 24] INFO osbclsupport.SimpleJobLauncher - Job:[FlowJob:[name = db2FileJob]]使用以下参数完成:[{a = aa,b = 123,c = ccc,d = 11,22,33}]并且状态如下:[COMPLETED] 11: 02:37.204 [tomcat-http - 24] DEBUG osbfsDefaultListableBeanFactory - 在bean上调用afterPropertiesSet(),名称为'jobLauncher'11:02:37.205 [tomcat-http - 24] DEBUG osweb.servlet.DispatcherServlet - 无法完成请求javax.servlet.ServletException:无法在org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)〜[spring-webmvc-]中解析名为'mint-gateway'的servlet中名为'jobLauncher'的视图4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)~ [spring-webmvc-4.0.0.RELEASE.jar:4.0.0 .RELEASE] a在org.springframework.web.servlet.DispatcherServlet上的t org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)〜[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] . orService.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)中的doService(DispatcherServlet.java:876)〜[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] [spring- webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)[spring-webmvc-4.0.0.RELEASE.jar:4.0 . 0.RELEASE]在javax.servlet.http.HttpServlet.service(HttpServlet.java:621)[servlet-api.jar:na] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)[ spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.apache.catalina的javax.servlet.http.HttpServlet.service(HttpServlet.java:728)[servlet-api.jar:na] org.apache.c .core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)[catalina.jar:7.0.50.C] atalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina.jar:7.0.50.C] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)[tomcat7-websocket .jar:7.0.50.C] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)[catalina.jar:7.0.50.C] at org.apache.catalina.core.ApplicationFilterChain . doFilter(ApplicationFilterChain.java:210)[catalina.jar:7.0.50.C] at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)[spring-orm-4.0.0.RELEASE .jar:4.0.0.RELEASE] org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org . apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)[catalina.jar:7.0.50.C] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina.jar :7.0.50 .g]在org.springframework上的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:311)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] . org.springframework.security.web.access上的security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] . org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy . )中的intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] . java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1 .O.RELEASE.jar:3.1.0.RELEASE]在org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)[spring-security-web-3.1.0.RELEASE.jar:3.1 .O.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] at org . springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContext) HolderAwareRequestFilter.java:54)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring -security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)[spring-security-web-3.1.0 .rELEASE.jar:3.1.0.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0 .RELEASE] org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] at org . springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.authentication . AbstractAuthenticationProc essingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java: 323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)[spring-security] -web-3.1.0.RELEASE.jar:3.1.0.RELEASE]在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE .jar:3.1.0.RELEASE] at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE在Org.springframework.security的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] . web.FilterChainPro xy.doFilter(FilterChainProxy.java:173)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344) [spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)[spring-web-4.0.0.RELEASE.jar :4.0.0.RELEASE] org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)[catalina.jar:7.0.50.C] at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:210) [catalina.jar:7.0.50.C] at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)[spring-web-4.0.0.RELEASE.jar:4.0 .O.RELEASE]在org.apache.catalina的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] . core.ApplicationFilterChain.internalDoFilter(ApplicationFilte rChain.java:243)[catalina.jar:7.0.50.C] org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina.jar:7.0.50.C] at org . springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter . java:108)[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE] atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)[catalina.jar:7.0.50.C] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina .jar:7.0.50.C] org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)[catalina.jar:7.0.50.C] at org.apache.catalina.core.StandardContextValve . 在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)[catalina.jar:7.0.50.C]中调用(StandardContextValve.java:123) [catalina.jar:7.0.50.C] org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)[catalina.jar:7.0.50.C] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)[catalina .jar:7.0.50.C] org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)[catalina.jar:7.0.50.C] at org.apache.catalina.core.StandardEngineValve . 在(或)调用(StandardEngineValve.java:118) [catalina.jar:7.0.50.C] g.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)[catalina.jar:7.0.50.C] at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)[tomcat -coyote.jar:7.0.50.C] atg.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)[tomcat-coyote.jar:7.0.50.C] atg.apache.tomcat . util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:313)[tomcat-coyote.jar:7.0.50.C] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[na:1.7 .0_51] at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)[na:1.7.0_51] at java.lang.Thread.run(Thread.java:744)[na:1.7.0_51 ] 11:02:37.205 [Tomcat的HTTP - 24] DEBUG osojsOpenEntityManagerInViewFilter - 在OpenEntityManagerInViewFilter 11关闭JPA的EntityManager:02:37.205 [Tomcat的HTTP - 24] DEBUG osojpa.EntityManagerFactoryUtils - 关闭JPA EntityManager的11:02:37.205 [tomcat-http - 24] DEBUG osswcHt tpSessionSecurityContextRepository - SecurityContext为空或内容为匿名 - 上下文不会存储在HttpSession中 . 11:02:37.205 [tomcat-http - 24] DEBUG osswcSecurityContextPersistenceFilter - SecurityContextHolder现已清除,请求处理已完成2014年7月21日上午11:02:37 org.apache.catalina.core.StandardWrapperValve调用SEVERE:Servlet.service ()对于带有路径[/ mintgw]的上下文中的servlet [mint-gateway]抛出异常[无法使用名称为'mint-gateway'的servlet解析名称为'jobLauncher'的视图',其根本原因为javax.servlet.ServletException:无法在与org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)在org.springframework.web.servlet.DispatcherServlet.processDispatchResult名“薄荷网关”的servlet解决视图名为“jobLauncher”(DispatcherServlet的 . 的java:1012)在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)在org.springframework.web.servlet .FrameworkServlet.processRequest(FrameworkServl et.java:931)org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822),位于org.springframework.web.servlet的javax.servlet.http.HttpServlet.service(HttpServlet.java:621) .FrameworkServlet.service(FrameworkServlet.java:807)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)的javax.servlet.http.HttpServlet.service(HttpServlet.java:728) . apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:243)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)在org.springframework .web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)at o rg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)位于org.apringframework.security.web.FilterChainProxy $ VirtualFilterChain的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) . doFilter(FilterChainProxy.java:311)atorg.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)在org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)在org.springframework . security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)位于org.springframework.security.web.FilterChainProxy $ VirtualFilterChain的org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) . 的doFilter(FilterChainProxy.java:323)在org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323) org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFil ter(FilterChainProxy.java:323)org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)在org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)在org.springframework.security.web位于org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)的.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) (AbstractAuthenticationProcessingFilter.java:182)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)at at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)位于org.springframework.security的org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323) . org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy . 的java:173)在org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)在org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:261)在org.apache.catalina.core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal (HiddenHttpMethodFilter.java:77)位于org.apache的org.apache.catal.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) . catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java: 108)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.apache.catalina.core.StandardWrapperValve .invoke(StandardWrapperValve.java:222)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)org . apache.cat alina.core.StandardHostValve.invoke(StandardHostValve.java:171)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java: 953)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)org.apache.coyote.http11.AbstractHttp11Processor .process(AbstractHttp11Processor.java:1044)atorg.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)位于java.util.concurrent.ThreadPoolExecutor的org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:313) . runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:744)11:02:37.206 [tomcat- http - 24] DEBUG osweb.servlet.DispatcherServlet - 名为'mint-gateway'的DispatcherServlet处理[/ mintgw / uncaughtException]的GET请求11:02:37.207 [tomcat-http - 24] DEBUG oswsmmaRequestMappingHandlerMapping - 向上看path / uncaughtException的handler方法

非常感谢这里的任何帮助,我是Spring世界的新手 . 谢谢 .

Update 2

根据other SO question中的建议更改程序; ie . , <batch:tasklet task-executor="taskExecutor"> with Task由于SO的空间限制而获得异常here in Gist .

2 回答

  • 0

    异常似乎是因为您在当前视图会话上运行作业后视图不再存在 .

    我建议在后台运行一个作业,在数据库上添加批处理请求,让批处理作业轮询该数据库,不要让视图触发它 .

  • 0

    你试过Spring-batch-admin模块吗?我认为你的要求可以通过spring-batch-admin来实现 . 此应用程序包含一个使用Spring MVC的Web UI,一个Java服务API和一个用于管理和监视Spring Batch作业的RESTful(JSON)API .

相关问题