Можно ли получить доступ к тасклету из JobExecutionContext весеннего пакета - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь отменить выполнение тасклета без отмены всего шага / задания.Я реализовал тасклет таким образом, что его можно отменить на основе флага.Но JobExecutionContext не предоставляет никакой среды для доступа к тасклету?Есть ли способ получить доступ к экземпляру тасклета?

Ответы [ 2 ]

0 голосов
/ 25 марта 2019
We can access an executing tasklet from jobRegistry 

    JobExecution jobExecution = findExecutionById(executionId);
try {
Job job = jobRegistry.getJob(jobExecution.getJobInstance().getJobName());
if (job instanceof StepLocator) {
// can only process as StepLocator is the only way to get the step object
                    // get the current stepExecution
for (StepExecution stepExecution : jobExecution.getStepExecutions()) {
if (stepExecution.getStatus().isRunning()) {
try {
 // have the step execution that's running -> need to 'stop' it
 Step step = ((StepLocator) job).getStep(stepExecution.getStepName());
 if (step instanceof TaskletStep) {

                        //Implement your logic here         }
                                }
                            } catch (NoSuchStepException e) {
                                logger.warn("Step not found", e);
                                throw new WorkflowServiceException("Step not found", e);
                            }
                        }
                    }
                }
            } catch (NoSuchJobException e) {
                logger.warn("Cannot find Job object in the job registry. StoppableTasklet#stop() will not be called", e);
                throw new WorkflowServiceException(
                        "Cannot find Job object in the job registry. StoppableTasklet#stop() will not be called", e);
            }

            return true;
        }
0 голосов
/ 11 марта 2019

это возможно с решателем

    public class MyDecider implements JobExecutionDecider {


    @Override
    public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {

        if (condition) {
        // choose what ever you want to do 
        return new FlowExecutionStatus("");    

            }
        // choose what ever you want to do 
        return new FlowExecutionStatus("");
    }
}

например, вы можете проверить здесь - https://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html

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