Я использую Spring Batch с @EnableBatchProcessing(modular = true)
Проблема в том, что в этом режиме вы должны явно объявить, какие бины инициализировать (т.е. какие классы нужно сканировать Spring)
Вот пример:
@Configuration
@EnableBatchProcessing(modular = true)
public class ModularJobsConfig {
@Autowired
private AutomaticJobRegistrar registrar;
@PostConstruct
public void initialize() {
registrar.addApplicationContextFactory(new GenericApplicationContextFactory(
SomeJobConfig.class,
SomeJobTasklet.class,
SomeClassToDefineTaskExecutor.class
SomeClassToRunTheJob.class));
}
}
Я могу себе представить, что к тому времени, когда у меня будет несколько заданий, этот класс конфигурации будет раздутым. Как я могу автоматизировать это?
Стоит отметить, что у каждой работы есть свой пакет (например, com.example.jobs.<job_name>
) + они определены в разных maven-модулях, но я думаю, что это не имеет значения.
Дальнейшее уточнение
У меня есть модуль core
, который содержит конфигурацию выше. Каждое задание определено в отдельном модуле maven, и оно было зарегистрировано как зависимость maven в core
.
В основном для предотвращения присвоения имени cla sh, я использую @EnableBatchProcessing(modular = true)
и регистрирую задания с AutomaticJobRegistrar
, как вы можете видеть в приведенном выше примере кода.
В идеале я бы хотел, чтобы Spring просканировал зависимость maven и сделал это для меня (т.е. определил GenericApplicationContextFactory
)
В настоящее время неудобно добавлять вручную каждый класс (в приведенном выше примере: SomeJobConfig.class
, SomeJobTasklet.class
et c)
В качестве контрпримера, если я не использовал modular=true
Я мог бы позволить Spring Batch загружать все bean-компоненты самостоятельно, но тогда я должен был бы убедиться, что имена методов уникальны для всех модулей.