Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/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批处理-MultiFileResourcePartitioner-原因:java.net.SocketException:连接重置_Spring_Amazon S3_Spring Batch - Fatal编程技术网

Spring批处理-MultiFileResourcePartitioner-原因:java.net.SocketException:连接重置

Spring批处理-MultiFileResourcePartitioner-原因:java.net.SocketException:连接重置,spring,amazon-s3,spring-batch,Spring,Amazon S3,Spring Batch,我使用FlatFileItemReader并扩展了AbstractResource以从AmazonS3对象返回流 S3Object amazonS3Object = s3client.getObject(new GetObjectRequest(bucket,file)); InputStream stream = null; stream = amazonS3Object.getObjectContent(); return stream; 在批处理作业中,我还实现了MultiFileRes

我使用FlatFileItemReader并扩展了AbstractResource以从AmazonS3对象返回流

S3Object amazonS3Object = s3client.getObject(new GetObjectRequest(bucket,file));
InputStream stream = null;
stream = amazonS3Object.getObjectContent();
return stream;
在批处理作业中,我还实现了MultiFileResourcePartitioner,其中我提供了一个bucket来对所有文件进行分区。我只能读取少数文件的一部分,之后我会出现套接字重置错误。请参阅下面的错误片段

.ResourcelessTransactionManager$ResourcelessTransaction@122ba881]
2015-08-24 23:24:03 DEBUG RepeatTemplate:366 - Repeat operation about to start at count=9
2015-08-24 23:24:03 DEBUG StepContextRepeatCallback:68 - Preparing chunk execution for StepContext: org.springframework.batch.core.scope.context.StepContext@252ce07a
2015-08-24 23:24:03 DEBUG StepContextRepeatCallback:76 - Chunk execution starting: queue size=0
2015-08-24 23:24:03 DEBUG ResourcelessTransactionManager:367 - Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
2015-08-24 23:24:03 DEBUG RepeatTemplate:464 - Starting repeat context.
2015-08-24 23:24:03 DEBUG RepeatTemplate:366 - Repeat operation about to start at count=1
2015-08-24 23:24:03 DEBUG RepeatTemplate:366 - Repeat operation about to start at count=2
2015-08-24 23:24:03 DEBUG RepeatTemplate:366 - Repeat operation about to start at count=3
2015-08-24 23:24:03 DEBUG RepeatTemplate:366 - Repeat operation about to start at count=4
2015-08-24 23:24:03 DEBUG DefaultClientConnection:160 - Connection 0.0.0.0:58171<->10.37.135.39:8099 shut down
2015-08-24 23:24:03 DEBUG DefaultClientConnection:176 - Connection 0.0.0.0:58171<->10.37.135.39:8099 closed

Caused by: org.springframework.batch.item.file.NonTransientFlatFileException: Unable to read from resource: [null]
    at org.springframework.batch.item.file.FlatFileItemReader.readLine(FlatFileItemReader.java:220)
    at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:173)
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.read(AbstractItemCountingItemStreamItemReader.java:83)
    at sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy17.read(Unknown Source)
    at org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:91)
    at org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:87)
    ... 22 more
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)</i>
.ResourcelessTransactionManager$ResourcelessTransaction@122ba881]
2015-08-24 23:24:03调试重复模板:366-在计数=9时重复即将开始的操作
2015-08-24 23:24:03调试StepContextRepeatCallback:68-准备StepContext的区块执行:org.springframework.batch.core.scope.context。StepContext@252ce07a
2015-08-24 23:24:03调试步骤ContextRepeatCallback:76-块执行开始:队列大小=0
2015-08-24 23:24:03调试资源事务管理器:367-创建名为[null]的新事务:需要传播,默认隔离
2015-08-24 23:24:03调试重复模板:464-开始重复上下文。
2015-08-24 23:24:03调试重复模板:366-在计数=1时重复即将开始的操作
2015-08-24 23:24:03调试重复模板:366-在计数=2时重复即将开始的操作
2015-08-24 23:24:03调试重复模板:366-在计数=3时重复即将开始的操作
2015-08-24 23:24:03调试重复模板:366-在计数=4时重复即将开始的操作
2015-08-24 23:24:03调试默认客户端连接:160-连接0.0.0.0:5817110.37.135.39:8099关闭
2015-08-24 23:24:03调试默认客户端连接:176-连接0.0.0:5817110.37.135.39:8099关闭
原因:org.springframework.batch.item.file.NonTransientFlatFileException:无法从资源中读取:[null]
位于org.springframework.batch.item.file.FlatFileItemReader.readLine(FlatFileItemReader.java:220)
位于org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:173)
位于org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.read(AbstractItemCountingItemStreamItemReader.java:83)
位于sun.reflect.GeneratedMethodAccessor35.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
位于org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)上
位于org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
位于org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
位于com.sun.proxy.$Proxy17.read(未知来源)
位于org.springframework.batch.core.step.item.SimpleChunkProvider.doRead(SimpleChunkProvider.java:91)
位于org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:87)
... 还有22个
原因:java.net.SocketException:连接重置
位于java.net.SocketInputStream.read(SocketInputStream.java:196)
位于java.net.SocketInputStream.read(SocketInputStream.java:122)

我的要求是处理S3存储桶中包含数百万条记录的文件,并且应用程序在AWS上运行。我已经通过了S3客户端配置和重试以及开放连接,但没有多大帮助。

正如@Michael Minella提到的,您可以选择使用project获取资源:

@Autowired
private ResourcePatternResolver resourcePatternResolver;

public void resolveAndLoad() throws IOException {
    Resource[] allTxtFilesInFolder =  this.resourcePatternResolver.getResources("s3://bucket/name/*.txt");
    Resource[] allTxtFilesInBucket =  this.resourcePatternResolver.getResources("s3://bucket/**/*.txt");
    Resource[] allTxtFilesGlobally =  this.resourcePatternResolver.getResources("s3://**/*.txt");
}

然后将资源传递给MultiFileResourcePartitioner,以查看异常是否可以解决。

Spring Cloud AWS项目提供了获取S3存储桶资源的抽象,但它将其作为本地资源下载。有什么原因你不能这么做吗?嗯,为了理解你的观点,你的意思是我通过Spring云抽象将S3存储桶传递给我的MultiresourcePartitioner吗?或者你说的是串行处理S3中的每个文件?我已经尝试使用SpringCloud,但仍然有相同的错误。我所做的是将接收到的所有文件传递给MultiResourcePartitioner,并将一个自定义资源传递给平面文件项读取器以读取流。我在这里做错了什么吗?更新:通过周末的一点测试,我发现只有在我的ItemProcessor中引入Soap调用时才会出现这个问题。如果没有ItemProcessor,它会工作得很好吗?这很奇怪,因为堆栈跟踪显示itemReader获得了一个“null”resourceNot,而Itemprocessor中没有Soap调用,它工作得很好。读S3中的所有数据可能已经读得精疲力竭了吗?更新:我已经将WS调用移动到Itemwriter,并且没有出现错误。