Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 batch Spring批处理在执行之间共享数据_Spring Batch - Fatal编程技术网

Spring batch Spring批处理在执行之间共享数据

Spring batch Spring批处理在执行之间共享数据,spring-batch,Spring Batch,我是新来的春药。我有一个简单的,概念证明的工作,它做一些虚假的事情 ItemReader:获取当前dateA和max date last记录之间的大量记录 ItemProcessor:聚合每个城市的行 ItemWriter:将结果写入数据库 我的问题是,当作业完成时,我希望保留最后一个日期,以便下一个作业执行从该日期开始,即dateA。我知道我可以使用JobExecutionContext共享数据,但如果在第二次运行时,我尝试获取dateA,但该值为null 是否有方法获取上一次作业执行记录的上

我是新来的春药。我有一个简单的,概念证明的工作,它做一些虚假的事情

ItemReader:获取当前dateA和max date last记录之间的大量记录 ItemProcessor:聚合每个城市的行 ItemWriter:将结果写入数据库

我的问题是,当作业完成时,我希望保留最后一个日期,以便下一个作业执行从该日期开始,即dateA。我知道我可以使用JobExecutionContext共享数据,但如果在第二次运行时,我尝试获取dateA,但该值为null

是否有方法获取上一次作业执行记录的上一个日期a值?怎么做


提前感谢

有多种方法可以实现这一点。最简单的方法就是将其写入文件,然后在下一次启动时读取该文件。但这有点脏。您也可以在DB中写入它,或者只运行sql,从DB中已有的数据返回最大日期。基本上,我将实现一个简单的TaskletSimple,它运行sql并在chunkContext上添加max数据

以下可能是一种替代方案

使用JobExecutionListenerafterJob将日期存储在bean持有者中。以下链接回答在步骤级别传递集合的问题


您好,谢谢您的回复。问题是数据已经存在,是否有一种适当的方法可以从上一次作业执行中获取已更新的值?只需实现一个简单的tasklet,如下所示:它运行返回最大日期的sql并将其添加到ChunkContext上,这是一种很好的方法。我想知道是否应该实现一个列表器,并添加像beforeJob这样的东西来检索值,以及afterJob来为下一个操作保留新值。我的问题是,这是否属于同一笔交易?写操作?关于交易的thxidk;我更喜欢tasklet,但我很确定您也可以使用beforeJob和AfterJob进行一些研究,默认情况下,tasklet的执行方法是事务性的。详情如下: