我是春季批量处理的新手。只是想要一些建议,以便我可以在阅读弹簧批次时进行连接。
我的方案如下: 我编写了4个java类,它们可以读取和修改oracle中的数据。 例如:Class1和Class2将修改表1,Class3和Class4将修改table2
我们如何通过spring批处理来并行化这些类的执行?
答案 0 :(得分:0)
在不知道每个班级的作用的情况下,我可以提供的建议有多么有限。话虽这么说,如果你想要做的就是使用Spring Batch并行执行每个类,Spring Batch提供了一些工具来帮助解决这个问题:
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>
您可以在此处的文档中详细了解MethodInvokingTaskletAdapter
:http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/core/step/tasklet/MethodInvokingTaskletAdapter.html