当前位置: 首页 > 面试题库 >

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

濮俊美
2023-03-14
问题内容

我已经成功设置了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撰写这篇文章。

非常感谢您的帮助!


问题答案:

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

请参阅多线程步骤

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



 类似资料:
  • 问题内容: 我写一个简单的应用程序,它涉及三个线程: ,和。 是 生成* 并馈给的生成器类。 * 消耗了 计算平均值。我的号码已经使用该饲料用。用途吃起来。 问题是:: 如果平均值超过中的1E5 ,我想表示停止产生数字。我有一个在需要被打开。我该如何实现? PS:该代码将永久运行,而无需在控制台上打印任何内容,我至今仍未弄清原因!! 问题答案: 您可以使用并将它传递给两个线程,原子类型是可访问的,

  • 多线程。在这种模式下,SQLite可以安全地由多个线程使用,前提是在两个或多个线程中不同时使用单个数据库连接。 序列化。在序列化模式下,SQLite可以安全地由多个线程使用,不受限制。

  • 用例:步骤1:ItemReader:从数据库中读取1000个ItemProcessor块中的数据:处理这些数据。ItemWriter:将数据写入地图,以便下一步使用 步骤2:ItemReader:读取地图ItemProcessor:处理地图数据并获取新对象。ItemWriter:将新的进程对象持久化到数据库中。 现在我希望Map在整个作业中保持不变,目前我已经为Map创建了一个不同的POJO类,并

  • 我正在编写spring批处理,它从平面文件中读取数据,很少进行处理,并将摘要写入输出文件。与reader相比,我的处理器和写入程序相对更快。我正在使用FlatFileItemReader,并尝试了从50-1000开始的各种提交间隔。我的批处理作业必须以更快的速度处理1000万条记录。请告诉我如何提高FlatFileItemReader的速度。粘贴到我的配置文件和映射器类下面,读取字段集并将值设置为

  • 问题内容: 有什么办法可以在Linux中设置线程的名称? 我的主要目的是在调试时会有所帮助,并且如果通过例如暴露该名称也很好 问题答案: 将功能与选项一起使用(请参阅docs)。 请注意,旧版本的文档有些令人困惑。他们说 设置调用进程的进程名称 但是由于线程是Linux上的轻量级进程(LWP),因此在这种情况下,一个线程就是一个进程。 您可以使用或使用以下命令查看线程名称: 或在之间的: 或从GD

  • 我看到默认情况下,multithreadEvaluation设置为false。我有一个使用电子表格决策表的简单Maven Spring Drools实现。 没什么大不了的,因为它基本上是一个标准安装。我有一个restful API,当使用jeter将POST发送到我们的endpoint时,实体被填充,然后我们在上面触发所有规则。当在jeter中使用多个线程时,我可以清楚地看到多线程不起作用。 从留