У меня есть несколько различных классов @Configuration, каждый из которых соответствует отдельному заданию Spring Batch, т. Е. В каждой конфигурации существует один компонент Job и каждый Step, Tasklet и т. Д. c. Требуется для данного задания существует в том же классе конфигурации, что и это задание. Пример:
@Configuration
public class DemoJobConfiguration(JobBuilderFactory jobBuilderFactory) {
@Bean
public Job demoJob() {
return jobBuilderFactory.get("demoJob").start(...).build();
}
}
@Configuration
public class TestJobConfiguration(JobBuilderFactory jobBuilderFactory) {
@Bean
public Job testJob() {
return jobBuilderFactory.get("testJob").start(...).build();
}
}
Приложение является приложением командной строки. Первый аргумент - это имя задания для запуска. Связанный компонент Job извлекается на основе этого аргумента и затем выполняется с помощью JobLauncher. Пример:
@Override
public void run(String... args) throws Exception {
String jobName = args[0];
Job job = prepareJob(jobName); //gets the Job from the application context
JobParameters jobParameters = prepareJobParameters(args); //sets args[1], etc. to JobParameter objects
JobExecution result = jobLauncher.run(job, jobParameters);
}
Я хотел бы знать, есть ли способ использовать аннотацию @Conditional (или что-то еще) для загрузки класса конфигурации, только если args [0] - это определенное значение, например,
@Configuration
@Conditional("\"testJob\".equals(args[0])")
public class TestJobConfiguration(JobBuilderFactory jobBuilderFactory) {
...
}
Преимущество этого заключается в том, что в память загружаются только компоненты, относящиеся к выполняемому заданию, а компоненты, соответствующие другим заданиям, никогда не загружаются. Это было бы в основном полезно, поскольку в проект добавляется больше заданий.
Возможна ли загрузка конфигураций на основе аргументов командной строки? Было ли это сделано раньше? Час поиска в Google ничего не дал, но я все еще надеюсь, что есть способ сделать это. 1014 *.