Пакет Spring запускает метод запуска SimpleJobLauncher перед методом запуска при загрузке - PullRequest
0 голосов
/ 17 июня 2020

У меня конфигурация задания, как показано ниже

@SpringBootApplication
public class Test implements CommandLineRunner {

    @Autowired
    JobLauncher jobLauncher;

    @Autowired
    Job job;

    @Autowired
    private JobBuilderFactory jobs;

    @Autowired
    private StepBuilderFactory steps;

    public static void main(String[] args) {
        SpringApplication.run(Test.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        JobParameters params = new JobParametersBuilder()
                .addString("JobID", String.valueOf(System.currentTimeMillis()))
                .toJobParameters();
        jobLauncher.run(job, params);
    }
}

Теперь проблема в том, что когда я запускаю это тестовое приложение, SimpleJobLauncher запускает метод выполнения до создания параметров задания. Из журналов

10:12:58.422 - [    main] - INFO  SimpleJobLauncher                        - Job: [SimpleJob: [name=demoJob]] launched with the following parameters: [{}]
10:12:58.466 - [    main] - INFO  SimpleStepHandler                        - Step already complete or not restartable, so no action to execute: StepExecution: id=14, version=3, name=stepOne, status=COMPLETED, exitStatus=COMPLETED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=1, rollbackCount=0, exitDescription=
10:12:58.478 - [    main] - INFO  SimpleStepHandler                        - Step already complete or not restartable, so no action to execute: StepExecution: id=15, version=3, name=stepTwo, status=COMPLETED, exitStatus=COMPLETED, readCount=0, filterCount=0, writeCount=0 readSkipCount=0, writeSkipCount=0, processSkipCount=0, commitCount=1, rollbackCount=0, exitDescription=
10:12:58.498 - [    main] - INFO  SimpleJobLauncher                        - Job: [SimpleJob: [name=demoJob]] completed with the following parameters: [{}] and the following status: [COMPLETED] in 44ms
10:12:58.530 - [    main] - INFO  SimpleJobLauncher                        - Job: [SimpleJob: [name=demoJob]] launched with the following parameters: [{JobID=1592381578499}]

Как видно из журналов, первое demoJob запускается без параметров

10:12:58.422 - [    main] - INFO  SimpleJobLauncher                        - Job: [SimpleJob: [name=demoJob]] launched with the following parameters: [{}]

После завершения задания без параметров запускается снова с параметрами.

10:12:58.530 - [    main] - INFO  SimpleJobLauncher                        - Job: [SimpleJob: [name=demoJob]] launched with the following parameters: [{JobID=1592381578499}]

Допустим, если в приложении два задания, то запускаются оба задания, хотя я хочу запустить конкретное c одно с указанными параметрами Есть ли способ контролировать это поведение, поэтому пакет Spring запускает только задание с параметрами мне нужно

1 Ответ

1 голос
/ 17 июня 2020

Вы можете отключить автоматическое c выполнение заданий при запуске, добавив свойство в application.yml или application.properties

spring.batch.job.enabled: false
...