Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.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
Java 如何使用spring批处理对输入数据进行分组?_Java_Spring_Spring Integration_Spring Batch - Fatal编程技术网

Java 如何使用spring批处理对输入数据进行分组?

Java 如何使用spring批处理对输入数据进行分组?,java,spring,spring-integration,spring-batch,Java,Spring,Spring Integration,Spring Batch,我的spring批处理作业从文件夹中读取csv文件(1个文件夹=1个作业,1个文件夹=1个工作单元)。我需要阅读这些数据,并使用来自外部端点的信息来丰富它们。显然,从外部端点获取每个CSV行的信息不是一个好主意,因为应用程序处理的是巨大的文件。但无论如何,我需要执行几个到远程端点的请求,但请求取决于CSV文件内容。假设名称为merchantId的列在哪里。对于每个merchantId,我必须执行对远程端点的请求,并使用响应中提供的数据充实相应的csv行。因此,我需要在spring batch中使

我的spring批处理作业从文件夹中读取csv文件(1个文件夹=1个作业,1个文件夹=1个工作单元)。我需要阅读这些数据,并使用来自外部端点的信息来丰富它们。显然,从外部端点获取每个CSV行的信息不是一个好主意,因为应用程序处理的是巨大的文件。但无论如何,我需要执行几个到远程端点的请求,但请求取决于CSV文件内容。假设名称为
merchantId
的列在哪里。对于每个
merchantId
,我必须执行对远程端点的请求,并使用响应中提供的数据充实相应的csv行。因此,我需要在spring batch中使用一些工具来收集所有
merchantId
s,然后根据
merchantId
s查找相应的行


春天我该怎么办?或者spring integration可以帮助我吗?

我认为这是你工作中的一个额外步骤,可以将所有
merchantIds
读入
集合。为所有这些数据调用服务,并将数据存储在
地图中的某个位置。下一步可以再次读取这些文件,通过他们的
merchantId
Map
获取商户详细信息。从您的源数据的角度来看,不确定这是否有效,但这样您肯定只需要调用一次外部服务


此外,我不确定是否有可能不再重新读取这些文件。尽管您可能会遇到内存不足错误…

您希望为每个商户ID调用API,还是希望为CSV中的所有商户ID一次性调用API?对于所有CSV中的所有商户ID,我们有很多商户ID吗?@Nghia-Do,是的-我们有很多商户ID,但CSV行数要大得多1。是的,由于性能下降,我绝对不想再次读取大文件。2.关于你的问题解决方案:把这张地图放在哪里?恐怕我不能使用JobExecutionContext。我在某个地方读到,我不能在JobExecutionContext 3中存储太大的对象。我想出了一个新主意——处理csv文件,并为每一行请求远程端点,但缓存响应。在这种情况下,我不需要再次读取文件。但在哪里保存这个缓存仍然是一个悬而未决的问题。我想知道你对这个想法的看法?那就是
Map
可以作为我们提到的步骤的输出。因此,作业上下文中没有任何条目。对于缓存,可以考虑使用Spring框架的Cache抽象。您的服务方法应该标记为
@Cachable
,并且每次您使用相同的参数调用该方法时,都会从缓存中获得结果:看起来像一个计划)我相信存在允许我们配置缓存生存时间的功能。是否可以使缓存作业范围更广?我希望每个作业执行都有独立的缓存?我认为
cacheResolver
可以解决您的需求。