Рубрики
Без рубрики

Весенний пакет: Экземпляр задания уже существует и завершен для параметров={}

– Весенний пакет: Экземпляр задания уже существует и завершен для параметров={}

Работа с пакетом Spring 2.2.0. ВЫПУСК и запуск задания с помощью планировщика Spring.

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();
	  }

	}

}
  

  
	
  

Проблема

Пакетное задание выполняется успешно только в первый раз, когда оно запускается во второй раз (через 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 + Работа . Если у вас нет никаких параметров для Параметров задания , просто передайте текущее время в качестве параметра, чтобы создать новый Экземпляр задания . Например,

//...

@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();
	  }

	}

}

Рекомендации

  1. Весенний пакет: Настройка и запуск работа
  2. Как создать новый экземпляр задания

Оригинал: “https://mkyong.com/spring-batch/spring-batch-a-job-instance-already-exists-and-is-complete-for-parameters/”