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

Popular posts from this blog

c# - Validate object ID from GET to POST -

node.js - Custom Model Validator SailsJS -

php - Find a regex to take part of Email -