Spring 批处理(内存存储库与具有内存数据库的持久存储库)

Spring Batch (In-memory Repository Vs Persistent repository with in-memory database)

Spring批处理提供了两种配置作业存储库的选项。

  1. 内存存储库 - 主要是开发。
  2. 持久存储库 - 主要是生产。

"If you get errors with the in-memory job repository and if you really don’t want to create batch tables in your database, use the persistent job repository with an in-memory database (like H2 or Derby)" - Spring 批量操作

谁能给我解释一下上面几行,即具有内存数据库的持久存储库相对于内存存储库的优势。

由于内存数据库是易变的,通过像 H2 db 这样具有内存数据库的持久作业存储库不会使持久作业存储库的行为类似于内存作业存储库吗?

JobInstanceDao、JobExecutionDao、StepExecutionDao(MapJobInstanceDao、MapJobExecutionDao、MapStepExecutionDao)的内存版本的问题在于它们不是线程安全的。

因此,一旦您开始实施并行步骤、并行块等,您很可能迟早 运行 会遇到问题。

因此,如果您不想保留批处理 运行时间数据并希望安全起见,请将内存数据库与 JdbcJobInstanceDao、JdbcJobExecutionDao 和 JdbcStepExecutionDao 一起使用。