在spring批处理程序中,我正在读取文件中的记录并与数据库进行比较,如果数据表明column1中的column1已经存在于table1中。
表1相当小且静态。有没有办法可以从table1获取所有数据并将其存储在弹簧批处理代码的内存中?现在,对于文件中的每个记录,选择查询都会访问数据库。
该文件有3列用" |"分隔。
我正在阅读的文件平均有1200万条记录,大约需要5个小时才能完成这项工作。
答案 0 :(得分:1)
我像使用标准网络应用一样使用缓存。使用Spring的缓存抽象添加服务缓存,这应该照顾它恕我直言。
答案 1 :(得分:1)
使用StepExecutionListener.beforeStep
(或@BeforeStep
)在内存中预加载
使用此技巧数据将在步骤执行前加载一次
这也适用于步骤重启。
答案 2 :(得分:0)
在JobExecutionListener.beforeJob( - )中加载静态表并将其保存在jobContext中,您可以使用“作业和步骤属性的后期绑定”通过多个步骤访问'。 您可以参考此链接的5.4部分http://docs.spring.io/spring-batch/reference/html/configureStep.html