繁体   English   中英

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

[英]Issues triggering a batch job from Spring MVC

我试图通过Web URL(Servlet / Spring MVC)触发批处理作业,当从主程序启动时,它可以正常工作。 当我启动Web服务器并点击url时,程序给了我一个例外,那就是jobLauncher无法解决。

这是一个非常接近我的要求的SO问题 ,但是我想看看我当前的方法是否已被纠正,然后再转到那里也是多线程的建议(这时我真的不需要)

这是我完美工作的配置batch-configMain program 我在这里通过servlet调用我的spring批处理

11:02:37.201 [tomcat-http--24]调试osorm.jpa.JpaTransactionManager-事务处理后不关闭预绑定的JPA EntityManager 11:02:37.202 [tomcat-http--24]信息osbclsupport.SimpleJobLauncher-作业:[ FlowJob:[name = db2FileJob]]使用以下参数完成:[{a = aa,b = 123,c = ccc,d = 11,22,33}]和以下状态:[COMPLETED] 11:02:37.204 [tomcat-http--24] DEBUG osbfsDefaultListableBeanFactory-在名称为'jobLauncher'的bean上调用afterPropertiesSet()11:02:37.205 [tomcat-http--24] DEBUG osweb.servlet.DispatcherServlet-无法完成请求javax.servlet。 ServletException:无法解析org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)中名称为“ mint-gateway”的servlet中名称为“ jobLauncher”的视图〜[spring-webmvc-4.0.0.RELEASE .jar:4.0.0.RELEASE] org.org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1012)〜[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] .springfram ework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)〜[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet .java:876)〜[spring-webmvc-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)[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]在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)[spring-webmvc在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)上的-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.apache.catalina.core上的[servlet-api.jar:na]。 org.apache.catalina.core.App上的ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)[catalina.jar:7.0.50.C] licationFilterChain.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]位于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.apache.catalina的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE]。 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)的core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)[catalina.jar:7.0.50.C] [catalina.jar:7.0.50 .C]在org.sprin gorgwork.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。 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter()的拦截器.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] FilterSecurityInterceptor.java:83)[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.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.0.RELEASE.jar:3.1.0 .RELEASE] org.springframework.security.web上的org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]。 FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]位于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(SecurityContextHolderAwareRequestFilter.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。 org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)的1.0.RELEASE.jar:3.1.0.RELEASE] [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 org.springframework.security.web.FilterChainProxy上的.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]在org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java :182)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE],位于org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainPr oxy.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) org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)上的[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE] [spring-security-web-3.1 .0.RELEASE.jar:3.1.0.RELEASE],位于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.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)[spring-security-web-3.1.0.RELEASE.jar:3.1.0.RELEASE]。 springframework.security.web.FilterChainProxy.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.RELEA SE.jar:4.0.0.RELEASE],位于org.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]位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina。 jar:7.0.50.C]在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)[spring-web-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]位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java :243)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)的[catalina.jar:7.0.50.C] org.springframework.web的[catalina.jar:7.0.50.C] .filter.CharacterEncodingFilter.doF ilterInternal(CharacterEncodingFilter.java:88)[spring-web-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)[spring-web在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)的-4.0.0.RELEASE.jar:4.0.0.RELEASE]在org.apache的[catalina.jar:7.0.50.C]。 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]位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)[catalina.jar:7.0.50.C]位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase。 java:502)[catalina.jar:7.0.50.C]在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)[catalina.jar:7.0.50.C]在org.apache中。 catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)[cat alina.jar:7.0.50.C],位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)[catalina.jar:7.0.50.C],位于org.apache.catalina.core.StandardEngineValve .invoke(StandardEngineValve.java:118)[catalina.jar:7.0.50.C]位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)[catalina.jar:7.0.50.C]在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)[tomcat-coyote.jar:7.0.50.C]在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607 ),位于org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:313)的[tomcat-coyote.jar:7.0.50.C]在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)[na:1.7.0_51]在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)[na:1.7.0_51]在java.lang.Thread.run(Thread.java:744)[na:1.7.0_51] 11:02:37.205 [tomcat-http--24]调试osojsOpenEntityM anagerInViewFilter-关闭OpenEntityManagerInViewFilter中的JPA EntityManager 11:02:37.205 [tomcat-http--24] DEBUG osojpa.EntityManagerFactoryUtils-关闭JPA EntityManager 11:02:37.205 [tomcat-http--24] DEBUG osswcHttpSessionSecurityContextRepository-安全上下文为空或安全上下文为空匿名-上下文将不会存储在HttpSession中。 11:02:37.205 [tomcat-http--24]调试osswcSecurityContextPersistenceFilter-SecurityContextHolder现在已清除,因为请求处理已于2014年7月21日完成org.apache.catalina.core.StandardWrapperValve调用SEVERE:Servlet.service( )对于路径为[/ mintgw]的上下文中的servlet [mint-gateway]引发了异常[无法解析名称为'mint-gateway'的servlet中名称为'jobLauncher'的视图],其根本原因是javax.servlet.ServletException:无法解析在org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java)的org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1208)的servlet中以名称``mint-gateway''命名的视图:1012),位于org.springframework.web.servlet的org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)的org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)。 FrameworkServlet.processRequest(FrameworkServlet.ja va:931),位于org.springframework.web.servlet.FrameworkServlet,位于javax.servlet.http.HttpServlet.service(HttpServlet.java:621),位于org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)处的javax.servlet.http.HttpServlet.service(HttpServlet.java:728)处的.service(FrameworkServlet.java:807)。位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)的catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain)。在org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:177)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)在org.springframework.web org.ap的.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108) 位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)的ache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter( org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)处的FilterChainProxy.java:311)org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java: 83)在org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)在org.springframework.security org.springframew上的.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)在org.springframew上.org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)在org.springframew ork.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)在org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)在org.springframework.security.web.FilterChainProxy $ org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:的org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)的VirtualFilterChain.doFilter(FilterChainProxy.java:323) 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.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)上的.doFilter(FilterChainProxy.java:323)org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)上的.doFilter(FilterChainProxy.java:323) ),位于org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105),位于org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)。 org.springframework.security.web.FilterChainProxy.doFilter(org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:323)处的security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:344)的org.springframework.web.filter.DelegatingFilterProxy.doFilter(Del的FilterChainProxy.java:173) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)的egatingFilterProxy.java:261)org.springframework.web处的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)的org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)的.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77) ),位于org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)位于org.springframework.web.filter.OncePerRequestFilter的org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)处。 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)处的doFilter(OncePerRequestFilter.java:108)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterC) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)处的hain.java:210)org.apache.catalina处的org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)处的hain.java:210) org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)的.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100 )的org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)的org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)的org.apache.catalina.connector.CoyoteAdapter。 org.apache.coyote.http11.service(CoyoteAdapter.java:409)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:607)在org.apache.coyote.http11 .tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:313)在java.util.concurrent.ThreadPoolExecut 或java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)上的or.runWorker(ThreadPoolExecutor.java:1145)在java.lang.Thread.run(Thread.java:744)上

11:02:37.206 [tomcat-http--24]调试osweb.servlet.DispatcherServlet-名称为'mint-gateway'的DispatcherServlet处理[/ mintgw / uncaughtException]的GET请求11:02:37.207 [tomcat-http--24 ] DEBUG oswsmmaRequestMappingHandlerMapping-查找路径/ uncaughtException的处理程序方法

我非常感谢这里的任何帮助,我是Spring world的新手。 谢谢。

更新2

根据另一个SO问题的建议改变程序; 例如,由于SO的空间限制,带有Task的<batch:tasklet task-executor="taskExecutor"> 在Gist <batch:tasklet task-executor="taskExecutor">我成为例外。

异常似乎是因为自从您在当前视图会话中运行作业以来,该视图不再存在。

我建议在后台运行一个作业,在数据库上添加批处理请求,然后让您的批处理作业轮询该数据库,而无需让视图触发它。

您是否尝试过Spring-batch-admin模块? 我认为spring-batch-admin可以满足您的要求。 该应用程序包含一个使用Spring MVC的Web UI,一个Java服务API和一个用于管理和监视Spring Batch作业的RESTful(JSON)API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM