我已经成功设置了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撰写这篇文章。
SimpleJobRepository
(ResourceLessTransactionManager)
(SimpleJobLauncher)
非常感谢你的帮助!
创建一个拆分,你将能够在不同分支之间使用多线程。使用TaskExecutor定义并行策略。
如果要使用多线程和MapJobRepository,请确保使用最新版本的Spring Batch(在最新版本之前,此JobRepository并非线程安全的)。