#java #spring #spring-batch
#java #spring #spring-batch
Вопрос:
Я реализовал удаленное разделение с помощью шага менеджера, обрабатывающего 2 файла в двух рабочих.
Последний шаг задания (manager) — это тасклет, который выполняет цикл по JobExecution.stepExecutions() и ищет количество записей / чтений для определенного имени шага.
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя в таблице BATCH_STEP_EXECUTION, сохраненной в БД (mysql), рабочие шаги имеют контекст, выровненный с тем, что я ожидаю, контекст, извлеченный из объекта в коде Java, пуст (количество чтения / записи равно 0), я также пытался добавить эти значения в StepExecutionContext, но контекст по-прежнему содержит только ключ раздела с путем к файлу.
Это мой рабочий шаг
@Bean
public Step mainWorkerStep() {
return this.remotePartitioningWorkerStepBuilderFactory
.get(STEP_NAME_MAIN_WORKER)
.inputChannel(requests())
.listener(switchDataSourceListener)
.<IntegrityReport, IntegrityReport>chunk(integrityJobPropertyHolder.getStagingWriterChunkSize())
.reader(integrityReportReaderConfig)
.writer(integrityReportWriterConfig)
.listener(partitionImportSummaryListener)
.build();
}
и это шаг менеджера
@Bean
public Step loadDataManagerStep() {
return remotePartitioningManagerStepBuilderFactory
.get(STEP_NAME_LOAD_DATA_MANAGER)
.partitioner(STEP_NAME_MAIN_WORKER, batchCommonMultiResourcePartitioner)
.gridSize(10)
.timeout(30 * 60 * 1000) // 30 minutes
.pollInterval(10000) // 10 seconds
.outputChannel(outboundRequests())
.build();
}
Как вы можете видеть на скриншоте ниже, статус «НАЧИНАЕТСЯ», в то время как в базе данных ЗАВЕРШЕНО.
Комментарии:
1. Является ли этот последний тасклет отдельным шагом, следующим за разделенным шагом? Как вы получаете выполнение задания?
2. @MahmoudBenHassine последний тасклет «ImportSummary» — это место, где я получаю информацию о выполнении шага, chunkContext.getStepContext().getStepExecution().getJobExecution().getStepExecutions() . Я также попытался добавить информацию от рабочего в контекст выполнения задания, но новые записи не сохраняются в БД. Я расширил конфигурацию BatchIntegrationConfiguration, чтобы установить конкретный txManager, мне интересно, может ли это быть проблемой
3. @MahmoudBenHassine. общедоступный класс IntegrityBatchIntegrationConfiguration расширяет пакетную конфигурацию { общедоступный модуль IntegrityBatchIntegrationConfiguration(JobRepository JobRepository, JobExplorer jobExplorer, @Qualifier(«batchJobManagementTxManager») PlatformTransactionManager TransactionManager) { super(JobRepository, jobExplorer, TransactionManager); }
4. @MahmoudBenHassine Я удалил расширение BatchIntegrationConfiguration и теперь извлекаю информацию о количестве записей / чтений из loadDataManagerStep, где они установлены правильно, не уверен почему, хотя контексты выполнения шага partion: 0 / parition: 1 не обновляются при извлечении информации из тасклета
5. У вас есть минимальный пример, который я могу использовать для воспроизведения проблемы?