在 spring 批次中从数据库中获取数据并存储在内存中
getting data from DB in spring batch and store in memory
在spring批处理程序中,我从文件中读取记录并与数据库进行比较,如果数据表明文件中的column1已经存在于table1中。
Table1 相当小而且是静态的。有没有一种方法可以从 table1 中获取所有数据并将其存储在 spring 批处理代码中的内存中?现在,对于文件中的每条记录,select 查询正在访问数据库。
文件有 3 列,用“|”分隔。
我正在阅读的文件平均有 1200 万条记录,完成这项工作大约需要 5 个小时。
我会像使用标准网络应用程序一样使用缓存。使用 Spring 的缓存抽象添加服务缓存,恕我直言,这应该会处理它。
使用StepExecutionListener.beforeStep
(或@BeforeStep
)在内存中预加载。
使用此技巧将在步骤执行前加载一次数据。
这也适用于步骤重新启动。
在 JobExecutionListener.beforeJob(-) 中加载静态 table 并将其保存在 jobContext 中,您可以使用 'Late Binding of Job and Step Attributes' 通过多个步骤访问。
您可以参考此 link http://docs.spring.io/spring-batch/reference/html/configureStep.html
的 5.4 部分
在spring批处理程序中,我从文件中读取记录并与数据库进行比较,如果数据表明文件中的column1已经存在于table1中。
Table1 相当小而且是静态的。有没有一种方法可以从 table1 中获取所有数据并将其存储在 spring 批处理代码中的内存中?现在,对于文件中的每条记录,select 查询正在访问数据库。
文件有 3 列,用“|”分隔。
我正在阅读的文件平均有 1200 万条记录,完成这项工作大约需要 5 个小时。
我会像使用标准网络应用程序一样使用缓存。使用 Spring 的缓存抽象添加服务缓存,恕我直言,这应该会处理它。
使用StepExecutionListener.beforeStep
(或@BeforeStep
)在内存中预加载。
使用此技巧将在步骤执行前加载一次数据。
这也适用于步骤重新启动。
在 JobExecutionListener.beforeJob(-) 中加载静态 table 并将其保存在 jobContext 中,您可以使用 'Late Binding of Job and Step Attributes' 通过多个步骤访问。 您可以参考此 link http://docs.spring.io/spring-batch/reference/html/configureStep.html
的 5.4 部分