我正在尝试从S3中读取一些文件,并对每个文件进行处理。我可以读取通过某些文件,但在处理过程中,在特定文件中的同一行中不断收到Java.net.SocketException: Connection reset错误。虽然我可以使用相同的类和方法(conversionUtils.convert())在本地处理有关文件,但这个文件应该是没问题的。
服务类:
服务类:
public class FileService {
@Inject
private S3Utils s3utils;
private ConversionUtils conversionUtils = new ConversionUtils();
public void processFile() {
List<S3ObjectSummary> files = s3utils.getAllFiles();
List<S3Object> unprocessedFiles = s3utils.getUnprocessedFiles(files);
for(S3Object file: unprocessedFiles) {
InputStream content = file.getObjectContent();
List<Record> records = conversionUtils.convert(content); //Exception thrown here
}
}
}
S3Utils类:
@Component
public class S3utils {
@Inject AmazonS3 amazonS3;
public List<S3ObjectSummary> getAllFiles() {
ListObjectsV2Request request = new ListObjectsV2Request().withBucketName('something').withPrefix('some_prefix');
ListObjectsV2Result result = amazonS3.listObjectsV2(request);;
return result.getObjectSummaries();
}
public List<S3Object> getUnprocessedFiles(List<S3ObjectSummary> files) {
//do some filtering here
List<S3Object> unprocessedFiles = new ArrayList<>();
for (S3ObjectSummary summary : filteredSummaries) {
S3Object s3Object = amazonS3.getObject(new GetObjectRequest(summary.getBucketName(), summary.getKey()));
unprocessedFiles.add(S3Object);
}
return unprocessedFiles;
}
}
配置类:
@Configuration
public class Config {
@Bean
public AmazonS3 amazonS3() {
return AmazonS3ClientBuilder.standard().withCredentials(new DefaultAWSCredentialsProviderChain()).build();
}
}
我已经阅读了一些其他与此类似的错误线程,其中问题是AmazonS3客户端被垃圾回收,从而关闭流,但我想知道这是否也是本例的情况。对于问题有什么想法吗?谢谢。