Spring Batch задание работает нормально только в первый раз. После этого не работаетJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring Batch задание работает нормально только в первый раз. После этого не работает

Сообщение Anonymous »

Я запускаю пакетное задание с помощью API. В первый раз, когда я запускаю API после каждого перезапуска сервера, все работает нормально. Проходит все точки останова и сохраняет данные в БД как положено. Однако после этого в журнале написано, что задание запущено и шаг выполняется. Но он не достигает каких-либо точек останова, и данные также не сохраняются должным образом. Мой код и конфигурация следующие:

Код: Выделить всё

// Controller
@RestController
@Component
public class MyController {
@Autowired
JobLauncher jobLauncher;

@Autowired
Job insertJob;

@PostMapping("/start")
public String startBatchJob(@RequestParam String validation) {
try {
String jobId = String.valueOf(System.currentTimeMillis());
JobParameters jobParameters = new JobParametersBuilder()
.addString("jobId", jobId)
.addString("validation", validation)
.toJobParameters();

JobExecution jobExecution = jobLauncher.run(insertJob, jobParameters);

if (jobExecution.getStatus().isUnsuccessful() || jobExecution.getStatus() == BatchStatus.FAILED)
return "Job FAILED with Job ID: " + jobId + ". Status: " + jobExecution.getStatus();

// Get job status or other details
return "Job finished successfully with Job ID: " + jobId + ".  Status: " + jobExecution.getStatus();
} catch (JobExecutionException e) {
e.printStackTrace();
return "Error starting job: " + e.getMessage();
}
}
}

// Batch Config
@Configuration
public class SpringBatchConfig {

@Autowired
ScheduledTasks scheduledTasks;

@Autowired
ValidationRepository validationRepository;

@Autowired
@Lazy
PlatformTransactionManager transactionManager;

@Autowired
@Lazy
JobRepository jobRepository;

public List
 getData() {
return scheduledTasks.callRestApiForData();
}

@Bean(name = "insertJob")
public Job insertJob(BaseWriter writer,
BaseProcessor processor,
BaseReader reader) {
return new JobBuilder("insertJob", jobRepository)
.incrementer(new RunIdIncrementer())
.listener(insertJobListener()).start(step_1(writer, processor, reader)).build();
}

@Bean
public Step step_1(BaseWriter writer,
BaseProcessor processor,
BaseReader itemReader) {
return new StepBuilder("step_1", jobRepository)
. chunk(200, transactionManager)
.reader(itemReader)
.processor(processor)
.writer(writer)
.build();
}

@Bean
public JobExecutionListener insertJobListener() {
return new InsertJobCompletionListener();
}

}

// listener
@Slf4j
public class InsertJobCompletionListener extends JobExecutionListenerSupport {

@Override
public void afterJob(JobExecution jobExecution) {
if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
log.info("UPDATE BATCH COMPLETED");
}
else if(jobExecution.getStatus() == BatchStatus.FAILED){
log.info("UPDATE BATCH JOB FAILED TO COMPLETE");
}

}
}

// reader

public interface BaseReader extends ItemReader {
}

@Configuration
public class ExchangeRateBaseReader implements BaseReader {

@Autowired
ScheduledTasks scheduledTasks;

private boolean read = false;
private List data;
private int index = 0;

@Override
public Personality read() throws Exception {
if (data == null) {
data = getData();
}
Personality item = null;
if (index < data.size()) {
item = data.get(index);
index++;
}
return item;
}

public List getData() {
return scheduledTasks.callRestApiForData();
}
}

// processor

public interface BaseProcessor extends ItemProcessor {
}

@Configuration
@Slf4j
public class CurrencyExchangeProcessor implements BaseProcessor {
@Override
public Personality process(Personality Personality) throws Exception {
return Personality;
}
}

// writer
public interface BaseWriter extends ItemWriter {
}

@Configuration
@Slf4j
public class CurrencyExchangeWriter implements BaseWriter {

@Autowired
private ValidationRepository validationRepository;

@Override
public void write(Chunk

Подробнее здесь: [url]https://stackoverflow.com/questions/79317222/spring-batch-job-runs-fine-only-the-first-time-doesnt-work-after-that[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»