[SPRING] Spring Batch - Aws S3의 파일 읽기
SPRINGSpring Batch - Aws S3의 파일 읽기
AWS S3에서 파일을 읽고 Spring Batch로 처리하려고합니다.
Spring Itemreader가이 작업을 처리 할 수 있습니까? 그렇다면 어떻게 S3 클라이언트에 자격 증명을 전달하고 파일 또는 여러 파일을 읽도록 spring xml을 구성합니까?
<bean id="itemReader" class=""org.springframework.batch.item.file.FlatFileItemReader"">
<property name="resource" value=""${aws.file.name}"" />
</bean>
해결법
-
==============================
1.업데이트 Spring-cloud-AWS를 사용하려면 여전히 FlatFileItemReader를 사용하지만 사용자 정의 확장 리소스를 만들 필요는 없습니다.
업데이트 Spring-cloud-AWS를 사용하려면 여전히 FlatFileItemReader를 사용하지만 사용자 정의 확장 리소스를 만들 필요는 없습니다.
대신 aws-context를 설정하고 S3Client 빈을 제공하십시오.
<aws-context:context-resource-loader amazon-s3="amazonS3Client"/>
독자는 다른 독자와 마찬가지로 설정 될 것입니다. 여기서 유일한 것은 ResourceLoader를 autowire하는 것입니다
@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 Resource 객체를 만드는 것입니다. Spring의 AbstractResource를 확장하여 AmazonS3 Client, 버킷 및 파일 경로 정보 등을 포함하는 자체 AWS 리소스를 만들 수 있습니다.
getInputStream의 경우 Java SDK를 사용하십시오.
S3Object object = s3Client.getObject(new GetObjectRequest(bucket, awsFilePath)); return object.getObjectContent();
다음에, contentLength -
return s3Client.getObjectMetadata(bucket, awsFilePath).getContentLength();
및 lastModified 사용
.getLastModified().getTime();
여러분이 만드는 리소스에는 SpringSoft 앱이 S3와 통신하는 데 필요한 모든 정보가 포함 된 AmazonS3Client가 있습니다. 다음은 Java 구성에서의 모습입니다.
reader.setResource(new AmazonS3Resource(amazonS3Client, amazonS3Bucket, inputFile));
-
==============================
2.FlatFileItemReader를 통해 S3에서 읽는 또 다른 방법은 Resource를 InputStream Resource로 설정 한 다음 s3client putobject를 사용하여 Stream을 업로드하는 것입니다.
FlatFileItemReader를 통해 S3에서 읽는 또 다른 방법은 Resource를 InputStream Resource로 설정 한 다음 s3client putobject를 사용하여 Stream을 업로드하는 것입니다.
reader.setResource(new InputStreamResouce(inputstream));
스트림이 채워지면,
s3client.putObject(bucketname,key,inputstream,metadata);
from https://stackoverflow.com/questions/30832041/spring-batch-read-files-from-aws-s3 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring의 Deprecated ExpressionEvaluationUtils 대안은 메소드를 평가합니까? (0) | 2019.04.26 |
---|---|
[SPRING] mysql을 봄 부팅 프로젝트에 연결할 수 없습니다. (0) | 2019.04.26 |
[SPRING] 잭슨 2 및 봄 Autowired 콩 (0) | 2019.04.26 |
[SPRING] 여러 개의 InternalResourceViewResolver 만들기 (0) | 2019.04.26 |
[SPRING] 봄 + 메이븐 + 하둡 (0) | 2019.04.25 |