Использование асинхронного исполнителя задач с считывателем ItemStreamJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Использование асинхронного исполнителя задач с считывателем ItemStream

Сообщение Anonymous »

Отказ от ответственности:
Код, которым я делюсь, был анонимизирован.

Привет, сообщество!
В моем проекте мы используем несколько пакетных заданий Spring, и это предупреждение появляется в нашем журнале каждый раз, когда мы запускаем приложение Spring.

ПРЕДУПРЕЖДЕНИЕ FaultTolerantStepBuilder: 501 асинхронный TaskExecutor обнаружен с помощью средства чтения ItemStream.

Я сузил конкретное задание, на которое жалуется StepBuilder, и он использует ThreadPoolTaskExecutor с RepositoryItemReader.

ItemReader расширяет одну из форм StreamReader, поэтому и выдается это исключение (я думаю). Мы используем отказоустойчивую версию StepBuilder.

Я попробовал реализовать собственный ItemReader, но это не сработало, поскольку он не был ThreadSafe. Кто-нибудь знает, что:
  • Это предупреждение нанесло им вред? (Пока нам это не причинило вреда)
  • Как написать потокобезопасное средство чтения элементов или как использовать синхронный исполнитель задач
Представьте себе пакетную настройку следующим образом:

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

@Configuration
@EnableBatchProcessing
@RequiredArgsConstructor
public class GenericBatchConfig {
public static final String GENERIC_JOB = "genericJob";

private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final GenericRepository genericRepository;
private final ItemReader reader;
private final GenericWriter writer;
private final UpdateDimensionTablesTasklet taslket;
private final ThreadPoolTaskExecutor taskExecutor;  // Async Executor

@Value("${example.schedule." + GENERIC_JOB + ": 59 59 23 31 12 ? 2099}")
private String cronExpression;

@Value("${example.application.genericJobChunkSize}")
private int chunkSize;

@StepScope
@Bean
public RepositoryItemReader reader() { // Not the custom reader, but how it was before i tried a custom reader which did not work
RepositoryItemReader repositoryItemReader = new RepositoryItemReader();

repositoryItemReader.setRepository(genericRepository);
repositoryItemReader.setMethodName("method");
repositoryItemReader.setSort(Collections.singletonMap("id", Sort.Direction.ASC));
repositoryItemReader.setPageSize(chunkSize);

return repositoryItemReader;
}

@Bean
public Trigger genericTrigger(@Qualifier("genericJobDetail") JobDetail genericJobDetail) {
return TriggerBuilder.newTrigger()
.forJob(genericJobDetail)
.withIdentity("genericTrigger")
.withDescription("description")
.withSchedule(cronSchedule(cronExpression))
.build();
}

@Bean
public JobDetail genericJobDetail() {
return JobDetailBuilder.newJob()
.withIdentity(GENERIC_JOB)
.withDescription("description")
.withJobName(GENERIC_JOB)
.build();
}

@Bean
public Job genericJob() {
return jobBuilderFactory
.get(GENERIC_JOB)
.start(step1())
.next(step2())
.build();
}

@Bean
public Step step1() {
return stepBuilderFactory
.get("taskletName")
.tasklet(tasklet)
.build();
}

private Step step2() {
return stepBuilderFactory
.get("stepName")
.chunk(chunkSize)
.faultTolerant() // Here is the faultTolerant Builder
.skipLimit(1000)
.skip(Exception.class)
.listener(new CustomSkipListener())
.reader(reader)
.writer(writer)
.taskExecutor(taskExecutor)
.build();
}
}
Сообщите мне, сталкивалась ли у кого-нибудь подобная проблема раньше и как вы ее решили. Существует очень похожий вопрос в разделе
Spring Batch «Асинхронный TaskExecutor, обнаруженный с помощью средства чтения ItemStream».
Но настройка другая.
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/792 ... eam-reader
Ответить

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

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

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

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

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