Я хочу отправить список из клиента отдыха для отдыха веб-сервиса, который запустит работу в Spring Batch. Возможно ли это, или я должен сохранить список в файле базы данных/flatfile перед запуском задания и прочитать входные значения из базы данных/файла flatfile? Я думаю, кто-то указал, как это происходит в определенной проблеме Джиры (см. Ниже), но я не мог понять, по крайней мере, основную идею о том, как двигаться вперед. Я поставил под своим контроллером и как я пытаюсь передать его в JobParameter. Я поместил ссылку Джиры и возможное направление, возможно, я должен был взять, но я действительно не понял предложения в этом вопросе Джиры. Я добавил ниже клиента SoapUi, и, наконец, я вставил внизу весь мой журнал ошибок.ArrayList не может быть отнесен к org.springframework.batch.core.JobParameter
Мой контроллер:
@RequestMapping(value = "runit/family", method = RequestMethod.POST)
public void handle(@RequestBody List<Person> myFamily) throws Exception {
System.out.println(myFamily); //until here, it is fine
JobParameters jobParameters = new JobParametersBuilder()
.addParameter("parametersReceived", (JobParameter) myFamily)
.addLong("time", System.currentTimeMillis()).toJobParameters();
jobLauncher.run(job, jobParameters);
}
SoapUI (пост):
[{"firstName":"aa","lastName":"bb"}]
Pojo
public class Person {
private String lastName;
private String firstName;
...getters and setters
Возможный способ работы, но я действительно путают об этой проблеме Jira. Честно говоря, я ожидал какой-то способ более простой, как я пытаюсь с JobParameter
https://jira.spring.io/browse/BATCH-966 (this suggestion is from 2009. Probably some more up-to-date technique is available)
<bean class="MyItemReader">
<property name="dynamicValuesHashMap" ref="map"/>
...
</bean>
<bean class="MyLauncher">
<property name="dynamicValuesHashMap" ref="map"/>
...
</bean>
Вся ошибка:
java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.springframework.batch.core.JobParameter
at hello.BatchController.handle(BatchController.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1521)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1478)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Это одноразовый сценарий? Вам нужно запускать работу только один раз? Параметр, который вы передаете, то есть список лиц, фиксирован. Что должно произойти, если запланированное задание нужно запустить снова? Мне кажется, что это не пакетная работа. – Utkarsh
Вы можете запустить задание из веб-службы или контроллера. Но я думаю, вам нужно получить список людей из базы данных во время выполнения задания в вашем классе Job. – Utkarsh
Существует определенное приложение A. Пользователь будет генерировать отчет в этом приложении A. Этот отчет является входом для пакета, который является частью домена приложения B. У пользователя будет два способа отправить этот отчет из приложения A в приложение B: (1) просто нажмите кнопку SEND, поэтому я хочу получить этот вход через службу отдыха и начать работу.(2) Отредактируйте электронную таблицу и сохраните ее в некоторой папке, которую приложение B будет читать каждые 5 минут, чтобы начать работу. Я не могу думать, что это не пакетная работа. –