3

我有一张超过 100 万客户的桌子。每个客户的信息都会经常更新,但每天只会更新一次。我有一个 Spring 批处理作业

  • 从客户表中读取客户 (JdbcCursorItemReader)
  • 处理客户信息(ItemProcessor)
  • 写入客户表 (ItemWriter)

我想一次运行 10 个作业,这些作业将从一个客户表中读取,而无需两次读取客户。这对 Spring 批处理是否可行,或者这是我必须使用本文中提到的 crawlLog 表在数据库级别处理的事情?

如何锁定对 MySQL 表的读/写,以便我可以选择然后插入,而无需其他程序读/写数据库?

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

4

1 回答 1

3

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

<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>

你可能想看看官方Spring Batch 文档中关于可伸缩性的这个和其他技术。

于 2013-05-31T12:58:58.593 回答