1.You первый отключить автоматический запуск задания, указав spring.batch.job.enabled=false
в application.properties
2.In ваш главный класс, сделать - ApplicationContext ctx = SpringApplication.run(SpringBatchMain.class, args);
предполагая ваш основной класс называется - SpringBatchMain.java.
Это инициализирует контекст без каких-либо заданий.
контекст 3.Once инициализируется, либо вы можете сделать - JobLauncher jobLauncher = (JobLauncher) ctx.getBean("jobLauncher");
или сделать Autowired
для этого JobLauncher фасоли в главном классе и запускать конкретные задания последовательно в конкретном последовательном порядке путем вызова, jobLauncher.run(job, jobParameters)
.
Вы можете получить конкретные job
примеров из контекста инициализируется на шаге 2.
Вы всегда можете использовать любую упорядоченную коллекцию, чтобы положить свои рабочие места там и рабочие места запуска итерируя над этой коллекцией.
4.Этот вышеописанный метод работает до тех пор, пока ваш JobLauncher настроен на синхронность, т. Е. Основной поток ожидает завершения вызова jobLauncher.run()
, и это поведение по умолчанию для jobLauncher.
Если вы определили свой jobLauncher для использования AsyncTaskExecutor, то задания будут запускаться параллельно, и последовательный заказ не будет поддерживаться.
Надеюсь, это поможет!
EDIT:
Я экспериментировал с @Order
аннотацию, как отметил Стефан Nicoll и это, кажется, только помочь в создании упорядоченного набора рабочих мест и что вы можете перемещаться и запускать задания в таком порядке.
Это ниже компонента дает мне работу в указанном порядке,
@Component
public class MyJobs {
@Autowired
private List<Job> jobs;
public List<Job> getJobs() {
return jobs;
}
}
и я могу сделать, MyJobs myJobs = (MyJobs) ctx.getBean("myJobs");
в главном классе при условии боба определяется,
@Bean
public MyJobs myJobs() {
return new MyJobs();
}
я могу перебирать myJobs
и рабочие места запуска в указанном порядке, указанном аннотацией @Order.
Итак, у вас есть одна работа с несколькими шагами или несколькими заданиями? Похоже, у вас есть только одна работа. Вы имеете в виду ** шаги **, когда вы говорите ** задания **? Показать код для 'stepRequestTickets()'. –
У меня много JOBS. Я хочу запускать задания последовательно в фиксированном порядке, но не могу найти способ заказа заданий. Это всего лишь фрагмент того, как я определяю работу. –