Проблема с подъемом пружины в партии версий с 3.0.7 по 3.0.9

Я работаю над проектом 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?

Mahmoud Ben Hassine 04.09.2018 17:32

У меня нет проблем с версией 3.0.8

Fosfor 04.09.2018 17:39

Интересный! Не могли бы вы поделиться проектом с минимальным кодом, который работает с 3.0.7, но не с 3.0.9? Я займусь расследованием, чтобы увидеть, есть ли регресс. Спасибо заранее.

Mahmoud Ben Hassine 04.09.2018 18:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
275
1

Ответы 1

За Махмуда Бен Хассина:

Составной процессор ->

@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)).

Mahmoud Ben Hassine 05.09.2018 12:53

Спасибо за помощь Махмуд. .Listener (promotionListenerBonjourRetour) возвращает org.springframework.batch.core.listener.ExecutionContextProm‌ otionListener. Прошу прощения за небольшую информацию, но я работаю над конфиденциальным проектом и не могу указать источник проекта: (

Fosfor 05.09.2018 14:28

Другие вопросы по теме