Spring Batch с модульным = true и GenericApplicationContextFactory является громоздким - PullRequest
0 голосов
/ 27 апреля 2020

Я использую 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-компоненты самостоятельно, но тогда я должен был бы убедиться, что имена методов уникальны для всех модулей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...