Я изучаю Spring Batch по мере его разработки.Требование таково;Если мне придется убить процесс в середине обработки;партия должна быть в состоянии забрать с того места, где она остановилась.Пакетное чтение данных из таблицы базы данных на основе диапазона дат и обработки и записи в другую таблицу, когда она обрабатывается.
Я отметил, что задание перезапускается = true.И для целей тестирования, когда я полностью уничтожаю работу (процесс) в моем локальном приложении.Я обновляю статус job_execution_id и step_execution_id до 'FAILED', используя ниже sql
update batch_job_execution
set status = 'FAILED'
where job_execution_id = '226'
update batch_step_execution
set status = 'FAILED'
where step_execution_id = 1357
, где идентификатор последнего выполнения пакетного задания равен 226, а идентификатор экземпляра задания равен 198, а соответствующий ему шаг выполнения равен 1357
Но, тем не менее, задание выдает ниже исключения при
org.springframework.batch.core.launch.support.SimpleJobLauncher.java line number 131
jobExecution = jobRepository.createJobExecution(job.getName(), jobParameters);
Exception thrown
org.springframework.batch.core.repository.JobExecutionAlreadyRunningException: A job execution for this job is already running: JobInstance: id=198, version=0, Job=[XYZ]
at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:120)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:197)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.batch.core.repository.support.AbstractJobRepositoryFactoryBean$1.invoke(AbstractJobRepositoryFactoryBean.java:181)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
at com.sun.proxy.$Proxy6.createJobExecution(Unknown Source)
at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:131)
at com.XYZ.main.AppMain.main(AppMain.java:43)