Как избежать повторного запуска задачи, когда ее состояние все еще выполняется в Spring Cloud Data Flow - PullRequest
0 голосов
/ 30 октября 2019

Я развернул проект Spring Batch в качестве задачи в Spring Cloud Data Flow.

Я запустил задачу впервые (она собиралась выполнить около 5 минут, что делало состояние задачи"Бег"). Тем не менее, я повторно запустил эту задачу во второй раз, когда она работает и снова работает.

1) Как настроить, чтобы задача не могла быть перезапущена до тех пор, пока она не будет завершена в последний раз. 2) Кроме того, я обнаружил, что при остановке задания оно будет выполняться до завершения текущего шага (у моего задания 2 шага, а второй шаг не был выполнен). Тем не менее, есть ли способы немедленно отключить его (шаг 1), когда я остановлю работу?

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Как избежать повторного запуска задачи, когда ее состояние все еще выполняется в потоке данных Spring Cloud

В Spring Cloud Task 2.0.0 добавлена ​​функция, позволяющая предотвратить одновременное выполнение задач. См. https://spring.io/blog/2018/05/07/spring-cloud-task-2-0-0-release-is-now-available#restricting-concurrent-task-execution

. Вам необходимо активировать свойство spring.cloud.task.singleInstanceEnabled=true.

Подробнее см. В разделе Ограничение экземпляров задачи Spring Cloud .

0 голосов
/ 30 октября 2019

Вы можете использовать JobExplorer класс для проверки запущенных заданий, см. Метод jobExplorer.findRunningJobExecutions(jobName).

В вашем классе JobLauncher вы можете что-то вроде этого:

@Component
public class MyJobLauncher {

    private static final Logger LOG = LoggerFactory.getLogger(MyJobLauncher.class);

    private final Job job;

    private final JobLauncher jobLauncher;

    private final JobExplorer jobExplorer;

    @Autowired
    public MyJobLauncher(@Qualifier("myJob") Job job, JobLauncher jobLauncher, JobExplorer jobExplorer) {
        this.job = job;
        this.jobLauncher = jobLauncher;
        this.jobExplorer = jobExplorer;
    }

    public void launchJob() throws JobParametersInvalidException, JobExecutionAlreadyRunningException,
            JobRestartException, JobInstanceAlreadyCompleteException, IOException {

        if (jobExplorer.findRunningJobExecutions("myJob").isEmpty()) {
            LOG.info("Starting myJob");
            jobLauncher.run(job, new JobParameters());
            LOG.info("Stopping myJob");
        }
    }
}

Чтобы завершить работу, проверьте метод JobExecution.stop () , который можно получить из метода jobExplorer.getJobExecution().

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