Ошибка при вызове configprops при настройке весеннего пакетного задания
Недавно я обновил приложение Spring Boot с 2.1.9 до 2.2.0, и у меня возникла проблема. Когда я вызываю "configprops" из конечной точки привода, возникает исключение: "Задание" области неактивно для текущего потока
Воспроизведу ошибку: https://github.com/guillaumeyan/bugspringbatch (просто запустите тест). Исходный проект взят с https://github.com/spring-guides/gs-batch-processing/tree/master/complete
Я пытался добавить:
@Bean
public StepScope stepScope() {
final StepScope stepScope = new StepScope();
stepScope.setAutoProxy(true);
return stepScope;
}
но это не работает (с spring.main.allow-bean-definition-overriding = true)
Вот моя конфигурация пружинной партии
@Bean
@JobScope
public RepositoryItemReader<DossierEntity> dossierToDiagnosticReader(PagingAndSortingRepository<DossierEntity, Long> dossierJpaRepository, @Value("#{jobParameters[origin]}") String origin) {
RepositoryItemReader<DossierEntity> diagnosticDossierReader = new RepositoryItemReader<>();
diagnosticDossierReader.setRepository(dossierJpaRepository);
diagnosticDossierReader.setMethodName("listForBatch");
// doing some stuff with origin
return diagnosticDossierReader;
}
ExceptionHandlerExceptionResolver[199] - Resolved [org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'scopedTarget.dossierToDiagnosticReader': Scope 'job' is not active for the current thread;
consider defining a scoped proxy for this bean if you intend to refer to it from a singleton; nested exception is java.lang.IllegalStateException: No context holder available for job scope]
2 ответа
Я скачал ваш проект и смог воспроизвести случай. В вашем примере есть две проблемы:
- Вы определяете bean-компонент с заданной областью в своем приложении, но
JobScope
не определен в вашем контексте (и вы не используете@EnableBatchProcessing
аннотацию, которая автоматически добавляет его в контекст). Если вы хотите использовать объем работы без@EnableBatchProcessing
, вам нужно вручную добавить его в контекст. - Ваш тест не проходит, потому что во время теста не выполняется никаких заданий. Компоненты с заданной областью действия создают ленивые экземпляры, когда задание действительно выполняется. Поскольку ваш тест не запускает задание, компонент не может быть проксирован правильно.
Ваш тест, похоже, не тестирует пакетное задание, я бы исключил bean-компонент с заданной областью из контекста теста.
Устранение ошибки при весенней загрузке 2.2.1 https://github.com/spring-projects/spring-boot/issues/18714