java - Spring Batch - Read files from Aws S3 -
i trying read files aws s3 , process spring batch:
can spring itemreader process task? if so, how pass credentials s3 client , config spring xml read file or multiple files
<bean id="itemreader" class=""org.springframework.batch.item.file.flatfileitemreader""> <property name="resource" value=""${aws.file.name}"" /> </bean>
update use spring-cloud-aws still use flatfileitemreader don't need make custom extended resource.
instead set aws-context , give s3client bean.
<aws-context:context-resource-loader amazon-s3="amazons3client"/>
the reader set other reader - thing that's unique here autowire resourceloader
@autowired private resourceloader resourceloader;
and set 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; }
i use flatfileitemreader , customization needs take place making own s3 resource object. extend spring's abstractresource create own aws resource contains amazons3 client, bucket , file path info etc..
for getinputstream use java sdk:
s3object object = s3client.getobject(new getobjectrequest(bucket, awsfilepath)); return object.getobjectcontent();
then contentlength -
return s3client.getobjectmetadata(bucket, awsfilepath).getcontentlength();
and lastmodified use
.getlastmodified().gettime();
the resource make have amazons3client contains info spring-batch app needs communicate s3. here's java config.
reader.setresource(new amazons3resource(amazons3client, amazons3bucket, inputfile));
Comments
Post a Comment