更新使用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',但正如我所说,我没有尝试过这个。 –