как работал разделенный поток в весенней партии? - PullRequest
0 голосов
/ 18 февраля 2019

Как работает следующий код?Flow1 и flow2 будут запущены одновременно?Когда начнется шаг 4?

@Bean
public Job job() {
    Flow flow1 = new FlowBuilder<SimpleFlow>("flow1")
                    .start(step1())
                    .next(step2())
                    .build();
    Flow flow2 = new FlowBuilder<SimpleFlow>("flow2")
                    .start(step3())
                    .build();

    return this.jobBuilderFactory.get("job")
                            .start(flow1)
                            .split(new SimpleAsyncTaskExecutor())
                            .add(flow2)
                            .next(step4())
                            .end()
                            .build();

}

1 Ответ

0 голосов
/ 19 февраля 2019

Да, поток 1 и поток 2 запускаются одновременно в коде, который вы дали.В методе Split вы передали реализацию асинхронного исполнителя задач, которая гарантирует, что потоки выполняются параллельно, вы можете увидеть это сами в журналах, настроив реализацию и назначив имя группы потоков.

@Bean
public TaskExecutor taskExecutor() {
    ThreadGroup threadGroup = new ThreadGroup("Example");
    Runtime runtime = Runtime.getRuntime();
    int nrCpu = runtime.availableProcessors();
    SimpleAsyncTaskExecutor asyncTaskExecutor = new 
    SimpleAsyncTaskExecutor("split-flow");
    asyncTaskExecutor.setThreadGroup(threadGroup);
    asyncTaskExecutor.setConcurrencyLimit(10);
    return asyncTaskExecutor;
}

В журналах вы найдете что-то вроде этого:

debug 10888 --- [ split-flow1] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step1]
debug 10888 --- [ split-flow2] o.s.batch.core.job.SimpleStepHandler     : Executing step: [step3]

здесь, split-flow1 и split-flow2 - это два разных потока.

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