一尘不染

如何在Spring Batch中设置多线程?

spring

我已经成功设置了Spring Batch项目教程。我真的很想知道是否有可能在“ Spring级别”使它成为多线程的。

我想要的基本思想是列出任务或任务步骤的列表,并让它们由独立的线程拾取和处理,理想情况下是从限制为“ n”个线程的池中进行。

这可能吗?如果是这样,怎么办?有人可以引导我到我目前所在的位置吗?

这是我当前的simpleJob.xml文件,其中包含作业详细信息:

<import resource="applicationContext.xml"/>

    <bean id="hello" class="helloworld.PrintTasklet">
        <property name="message" value="Hello"/>
    </bean>

    <bean id="space" class="helloworld.PrintTasklet">
        <property name="message" value=" "/>
    </bean>

    <bean id="world" class="helloworld.PrintTasklet">
        <property name="message" value="World!\n"/>
    </bean>

    <bean id="taskletStep" class="org.springframework.batch.core.step.tasklet.TaskletStep" >
        <property name="jobRepository" ref="jobRepository"/>
        <property name="transactionManager" ref="transactionManager"/>
    </bean>

    <bean id="simpleJob" class="org.springframework.batch.core.job.SimpleJob">
        <property name="name" value="simpleJob" />
        <property name="steps">
            <list>
                <bean parent="taskletStep">
                    <property name="tasklet" ref="hello"/>
                </bean>
                <bean parent="taskletStep">
                    <property name="tasklet" ref="space"/>
                </bean>
                <bean parent="taskletStep">
                    <property name="tasklet" ref="world"/>
                </bean>
            </list>
        </property>
        <property name="jobRepository" ref="jobRepository"/>
    </bean>

我的appContext包含作业存储库bean(SimpleJobRepository),事务管理器(ResourceLessTransactionManager)和作业启动器(SimpleJobLauncher)。如果需要的话,我也可以提供此代码,我只是不想用大量的XML撰写这篇文章。

非常感谢你的帮助!


阅读 1157

收藏
2020-04-18

共1个答案

一尘不染

创建一个拆分,你将能够在不同分支之间使用多线程。使用TaskExecutor定义并行策略。

如果要使用多线程和MapJobRepository,请确保使用最新版本的Spring Batch(在最新版本之前,此JobRepository并非线程安全的)。

2020-04-18