#spring #spring-batch
#spring #spring-batch
Вопрос:
Наличие определения задания spring:
<job id="footballJob">
<!-- Step bean details ommitted for clarity -->
<step id="playerload" next="gameLoad"/>
<step id="gameLoad" next="playerSummarization"/>
<step id="playerSummarization"/>
</job>
Могу ли я программно определить порядок выполнения шагов?
Ответ №1:
Могу ли я программно определить порядок выполнения шагов?
принимая ваш вопрос буквально, есть несколько вариантов:
- используйте Spring Tool Suite afaik, он может отображать потоки заданий
- разбор job.xml самостоятельно вы могли бы даже использовать пакетное задание Spring, что было бы довольно забавно
- попробуйте выполнить полный процесс настройки пакета, начните с spring.handlers и CoreNamespaceHandler.java , вы можете перезаписать его в соответствии с вашими потребностями
- SimpleFlow.java должно быть достаточно
я бы выбрал простой анализатор xml
Ответ №2:
Шаги будут выполняться в порядке, указанном в вашем примере.
В случае, если вы хотите указать порядок, который вы можете выполнить:
<job id="job">
<step id="stepA" parent="s1" next="stepB" />
<step id="stepB" parent="s2" next="stepC"/>
<step id="stepC" parent="s3" />
</job>
В случае, если вы хотите непоследовательное выполнение шага / условный поток, вы можете сделать:
<job id="job">
<step id="stepA" parent="s1">
<next on="*" to="stepB" />
<next on="FAILED" to="stepC" />
</step>
<step id="stepB" parent="s2" next="stepC" />
<step id="stepC" parent="s3" />
</job>
Чтобы программно управлять потоком, в зависимости от ExitStatus
, вы можете ввести свой собственный decider
:
public class MyDecider implements JobExecutionDecider {
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
if (someCondition) {
return "FAILED";
}
else {
return "COMPLETED";
}
}
}
В конфигурации задания тег «decision» будет указывать решающий элемент для использования, а также все переходы:
<job id="job">
<step id="step1" parent="s1" next="decision" />
<decision id="decision" decider="decider">
<next on="FAILED" to="step2" />
<next on="COMPLETED" to="step3" />
</decision>
<step id="step2" parent="s2" next="step3"/>
<step id="step3" parent="s3" />
</job>
<beans:bean id="decider" class="com.MyDecider"/>
Редактировать:
Если вы хотите получить dependency graph
, вы можете просто использовать Spring Tool Suite для визуализации потока, вот простой пример.
Комментарии:
1. Спасибо, но вопрос в том, как я могу программно определить, какой порядок шагов (или, другими словами, меня интересует график зависимостей)