Springバッチ:ジョブインスタンスはすでに存在し、パラメータ= \ {}に対して完了しています.

Spring Batch 2.2.0.RELEASEで作業し、Spring Schedulerでジョブを起動します。

CustomJobLauncher.java

package com.mkyong.batch;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class CustomJobLauncher {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    public void run() {

      try {

        JobExecution execution = jobLauncher.run(job, new JobParameters());
        System.out.println("Exit Status : " + execution.getStatus());

      } catch (Exception e) {
        e.printStackTrace();
      }

    }

}

job-config.xml

  <bean id="customJobLauncher" class="com.mkyong.batch.CustomJobLauncher"/>

  <task:scheduled-tasks>
    <task:scheduled ref="customJobLauncher" method="run" fixed-delay="10000"/>
  </task:scheduled-tasks>

問題

バッチジョブは、最初の時間にのみ正常に実行されています.2回目(10秒後)に起動すると、エラーメッセージが表示されます。

org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException:
    A job instance already exists and is complete for parameters={}.
        If you want to run this job again, change the parameters.
    at org.springframework.batch.core.repository.support.SimpleJobRepository.createJobExecution(SimpleJobRepository.java:126)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

解決策

上記のエラーメッセージを参照してください。 このジョブを再度実行する場合は、パラメータを変更してください。 "数式は` JobInstance = JobParameters Job`です。 JobParameters`のパラメータがない場合は、新しい JobInstance`を作成するためのパラメータとして現在の時刻を渡すだけです。例えば、

CustomJobLauncher.java

…​.//…​

@Component public class CustomJobLauncher {

@Autowired
JobLauncher jobLauncher;
@Autowired
Job job;
public void run() {
try {
  JobParameters jobParameters =
    new JobParametersBuilder()
    .addLong("time",System.currentTimeMillis()).toJobParameters();
JobExecution execution = jobLauncher.run(job, jobParameters);
System.out.println("Exit Status : " + execution.getStatus());
} catch (Exception e) {
  e.printStackTrace();
}
}

}

=== 参考文献

.  http://static.springsource.org/spring-batch/reference/html/configureJob.html[Spring

バッチ:ジョブの設定と実行]。 http://forum.springsource.org/showthread.php?58319-How-to-create-new-job-instance-How

新しいジョブインスタンスを作成する]

link://tag/spring-batch/[スプリングバッチ]
次の投稿:java.lang.ClassNotFoundException:com/sun/xml/bind/v2/model/annotation/AnnotationReader