Я работаю над проектом Java с использованием инфраструктуры Spring Batch, и мне нужно обновить его с версии 3.0.7 до 3.0.9, но у меня возникла проблема:
@Bean
public Step bonjourRetourJpaToX(StepBuilderFactory stepBuilderFactory, TaskExecutor taskExecutor,
ItemProcessor<BonjourRetourGroup, BonjourElementBlocAgent> compBonjourRetourBonjourProcessor,
@Qualifier("promotionListenerBonjourRetour") ExecutionContextPromotionListener promotionListenerBonjourRetour) {
return stepBuilderFactory.get("bonjourRetourJpaToX").<BonjourRetourGroup, BonjourElementBlocAgent>chunk(batchSizeLoadXml)
.reader(bonjourRetourJpaReader)
.processor(compBonjourRetourBonjourProcessor)
.writer(bonjourRetourXmlWriter)
.taskExecutor(taskExecutor)
.listener(promotionListenerBonjourRetour)
.listener(dsBonjourRetourFinalProcessor())
.listener(dsBonjourRetourTemporaryProcessor)
.listener(bonjourRetourBonjourBoucleStepListener())
.throttleLimit(bonjourRetourJobThrottleLimit)
.build();
}
С ошибкой компиляции maven:
[ERROR] src/main/java/source/bonjourRetour/batch/BonjourRetourJobConfig.java:[1025,33] cannot find symbol symbol: method throttleLimit(int)
Этот шаг многопоточный
У меня нет проблем с версией 3.0.8
Интересный! Не могли бы вы поделиться проектом с минимальным кодом, который работает с 3.0.7, но не с 3.0.9? Я займусь расследованием, чтобы увидеть, есть ли регресс. Спасибо заранее.




За Махмуда Бен Хассина:
Составной процессор ->
@Scope(value = "step", proxyMode = ScopedProxyMode.NO)
@Bean(name = "compBonjourRetourBonjourProcessorX")
public ItemProcessor<BonjourRetourGroup, XElementBlocAgent> compBonjourRetourBonjourProcessorX(@Value("#{stepExecution}") final StepExecution stepExecution) {
CompositeItemProcessor<BonjourRetourGroup, XElementBlocAgent> compositeProcessor = new CompositeItemProcessor<>();
compositeProcessor
.setDelegates(Arrays.asList(dsBonjourRetourXTemporaryProcessor, dsBonjourRetourXinalProcessor()));
return compositeProcessor;
}
Я заметил это, когда переместил слушателя: bonjourRetourBonjourBoucleStepListener (); вот так он компилируется:
@Bean
public Step bonjourRetourJpaToX(StepBuilderFactory stepBuilderFactory, TaskExecutor
taskExecutor,
ItemProcessor<BonjourRetourGroup, BonjourElementBlocAgent> compBonjourRetourBonjourProcessor,
@Qualifier("promotionListenerBonjourRetour") ExecutionContextPromotionListener promotionListenerBonjourRetour) {
return stepBuilderFactory.get("bonjourRetourJpaToX").<BonjourRetourGroup, BonjourElementBlocAgent>chunk(batchSizeLoadXml)
.reader(bonjourRetourJpaReader)
.processor(compBonjourRetourBonjourProcessor)
.writer(bonjourRetourXmlWriter)
.taskExecutor(taskExecutor)
.listener(promotionListenerBonjourRetour)
.listener(dsBonjourRetourFinalProcessor())
.listener(bonjourRetourBonjourBoucleStepListener())
//SWITCHED
.listener(dsBonjourRetourTemporaryProcessor)
.throttleLimit(bonjourRetourJobThrottleLimit)
.build();
Я знаю, что dsBonjourRetourTemporaryProcessor возвращает ItemProcessor, а bonjourRetourBonjourBoucleStepListener возвращает StepExecutionListener
Для других частей моего проекта с этой проблемой, когда я переместил StepExecutionListener, он работает
Может проблема здесь?
Спасибо за обновления. Это сложно, потому что в этих сборщиках есть несколько перегруженных методов listener. Один из них AbstractTaskletStepBuilder#listener(java.lang.Object) возвращает текущий тип построителя, поэтому порядок вызова слушателей может быть важен. Но я не знаю, какая комбинация приводит к тому, что метод throttleLimit не отображается. Я хотел бы помочь, но мне нужен полный код минимального образца для воспроизведения проблемы (например, я не могу узнать, просто взглянув на ваш пример, какой тип построителя возвращает .listener(promotionListenerBonjourRetour)).
Спасибо за помощь Махмуд. .Listener (promotionListenerBonjourRetour) возвращает org.springframework.batch.core.listener.ExecutionContextProm otionListener. Прошу прощения за небольшую информацию, но я работаю над конфиденциальным проектом и не могу указать источник проекта: (
У вас проблема с версией 3.0.8?