Я пытаюсь прочитать некоторые файлы из S3 и выполнить некоторую обработку для каждого файла.Я могу просмотреть некоторые файлы, но продолжаю получать Java.net.SocketException: сброс соединения в той же строке в определенном файле во время обработки.Тем не менее, рассматриваемый файл должен быть в порядке, потому что я могу обработать его локально, используя тот же класс и метод (convertUtils.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 собирал мусор и поэтому закрывал поток, ноМне интересно, так ли это здесь.Есть идеи по поводу проблемы?Спасибо.