Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在spring批处理中运行并发作业而不重复读取数据_Spring_Spring Batch - Fatal编程技术网

如何在spring批处理中运行并发作业而不重复读取数据

如何在spring批处理中运行并发作业而不重复读取数据,spring,spring-batch,Spring,Spring Batch,我有超过一百万的顾客。每个客户的信息都会经常更新,但每天只更新一次。我有一份春季批量工作 从客户表(JdbcCursorItemReader)中读取客户 处理客户信息(ItemProcessor) 写入客户表(ItemWriter) 我想一次运行10个作业,这些作业将从一个客户表中读取数据,而不会读取一个客户两次。这在SpringBatch中是可能的,还是我必须在数据库级别使用本文中提到的爬行日志表来处理 我知道参数可以传递给作业。我可以读取所有客户ID,并将客户ID平均分配给10个作业。

我有超过一百万的顾客。每个客户的信息都会经常更新,但每天只更新一次。我有一份春季批量工作

  • 从客户表(JdbcCursorItemReader)中读取客户
  • 处理客户信息(ItemProcessor)
  • 写入客户表(ItemWriter)
我想一次运行10个作业,这些作业将从一个客户表中读取数据,而不会读取一个客户两次。这在SpringBatch中是可能的,还是我必须在数据库级别使用本文中提到的爬行日志表来处理


我知道参数可以传递给作业。我可以读取所有客户ID,并将客户ID平均分配给10个作业。但这是正确的做法吗

框架有几种方法来指定您想要什么,这取决于您得到了什么。更简单的方法是将任务执行器添加到步骤或流程中:

<step id="copy">
  <tasklet task-executor="taskExecutor" throttle-limit="10">
  ...
  </tasklet>
</step>

<beans:bean id="taskExecutor"
  class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
  <property name="corePoolSize" value="10"/>
  <property name="maxPoolSize" value="15"/>
</beans:bean>

...
您可能希望在关于可伸缩性的官方文档中了解这项技术和其他技术