2014-10-28 132 views
0

我是Spring批處理的新手。只是想要一些建議,以便我可以在閱讀春季批次時連接。使用Spring批處理執行多個處理類

我的場景如下: 我寫了4個java類,它們會讀取和修改oracle中的數據。例如:Class1和Class2將修改表1,Class3和Class4將修改表2

如何使用彈簧批處理來並行執行那些類?

回答

0

不知道每個班級都做了什麼,我可以提供的建議有多好。話雖這麼說,如果你想要做的是使用Spring Batch的並行執行的每個類,Spring Batch的提供了一些工具來幫助這樣的:

  1. 斯普利特 - 春A批拆分爲師流程使得步驟可以並行執行。在你的情況下,我希望兩個或四個流並行執行(取決於你是否需要依次執行Class1 - > Class 2,但是該順序與Class 3 - > Class4並行執行,或者如果您可以運行所有四個班級並行)。
  2. MethodInvokingTaskletAdapter - Spring Batch提供的這個Tasklet實現允許您在事務範圍內的指定bean上執行一個方法。這使您可以用Tasklet包裝現有的類,以便Spring Batch可以輕鬆使用它們。

有了上述概念,你可以配置你的批處理作業看起來像下面這樣:

<job id="job1"> 
    <split id="split1"> 
     <flow> 
      <step id="split1Step1" next="split1Step2"> 
       <tasklet ref="class1Tasklet"/> 
      </step> 
      <step id="split1Step2"> 
       <tasklet ref="class2Tasklet"/> 
      </step> 
     </flow> 
     <flow> 
      <step id="split2Step1" next="split2Step2"> 
       <tasklet ref="class3Tasklet"/> 
      </step> 
      <step id="split2Step2"> 
       <tasklet ref="class4Tasklet"/> 
      </step> 
     </flow> 
    </split> 
</job> 

<bean id="class1Tasklet" class="org.springframework.batch.core.step.tasklet.MethodInvokingTaskletAdapter"> 
    <property name="targetObject"> 
     <bean class="Class1"/> 
    </property> 
    <property name="targetMethod" value="someMethod"/> 
</bean> 

<bean id="class2Tasklet" class="org.springframework.batch.core.step.tasklet.MethodInvokingTaskletAdapter"> 
    <property name="targetObject"> 
     <bean class="Class2"/> 
    </property> 
    <property name="targetMethod" value="someMethod"/> 
</bean> 

<bean id="class3Tasklet" class="org.springframework.batch.core.step.tasklet.MethodInvokingTaskletAdapter"> 
    <property name="targetObject"> 
     <bean class="Class3"/> 
    </property> 
    <property name="targetMethod" value="someMethod"/> 
</bean> 

<bean id="class4Tasklet" class="org.springframework.batch.core.step.tasklet.MethodInvokingTaskletAdapter"> 
    <property name="targetObject"> 
     <bean class="Class4"/> 
    </property> 
    <property name="targetMethod" value="someMethod"/> 
</bean> 

您可以將文檔在這裏閱讀更多關於MethodInvokingTaskletAdapterhttp://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/step/tasklet/MethodInvokingTaskletAdapter.html

+0

讓我們說你想要使用一個類而不是多個類。例如:類'Car'的方法是'start()'和'stop()'。步驟1是'start()',步驟2是'stop()'。使用上面的方法,假設您需要在啓動和停止之間傳遞一些數據。這將如何完成以確保可重新啓動是可能的? – 2016-11-09 19:34:10