更新使用Spring-雲AWS你仍然會使用FlatFileItemReader,但現在你不需要製作自定義的擴展資源。
取而代之,您將設置一個aws-context併爲其提供您的S3Client bean。
<aws-context:context-resource-loader amazon-s3="amazonS3Client"/>
讀者將設立像任何其他讀者 - 這裏是唯一的唯一的事情是,你現在會自動裝配您的ResourceLoader
@Autowired
private ResourceLoader resourceLoader;
然後設置的ResourceLoader:
@Bean
public FlatFileItemReader<Map<String, Object>> AwsItemReader() {
FlatFileItemReader<Map<String, Object>> reader = new FlatFileItemReader<>();
reader.setLineMapper(new JsonLineMapper());
reader.setRecordSeparatorPolicy(new JsonRecordSeparatorPolicy());
reader.setResource(resourceLoader.getResource("s3://" + amazonS3Bucket + "/" + file));
return reader;
}
我會使用FlatFileItemReader和需要發生的自定義是讓你你有自己的S3資源對象。擴展Spring的AbstractResource創建包含AmazonS3客戶端,水桶和文件路徑信息等自己的AWS資源..
對於的getInputStream使用Java SDK:
S3Object object = s3Client.getObject(new GetObjectRequest(bucket, awsFilePath));
return object.getObjectContent();
那麼對於CONTENTLENGTH -
return s3Client.getObjectMetadata(bucket, awsFilePath).getContentLength();
和上次更改使用
.getLastModified().getTime();
的資源你make將擁有AmazonS3Client,其中包含您的Spring-batch應用程序需要與S3進行通信的所有信息。以下是Java配置可能的樣子。
reader.setResource(new AmazonS3Resource(amazonS3Client, amazonS3Bucket, inputFile));
我還沒有嘗試過,但Spring Cloud AWS爲S3增加了'Resource'抽象。你可能想看看:http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html#_resource_handling –
謝謝。我來看看它。那麼,我是否使用上述資源創建自定義項目閱讀器?批處理的任何想法? – sve
不,我希望你能夠使用'FlatFileItemReader',但正如我所說,我沒有嘗試過這個。 –