Дерево зависимостей из конфигурации пакета spring

#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 , вы можете перезаписать его в соответствии с вашими потребностями

я бы выбрал простой анализатор 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. Спасибо, но вопрос в том, как я могу программно определить, какой порядок шагов (или, другими словами, меня интересует график зависимостей)