복붙노트

[SPRING] AmazonS3 연결 관리

SPRING

AmazonS3 연결 관리

AWS로 작업 할 때 AmazonS3에 대한 연결을 관리하는 권장 방법이 있습니까?

일반적인 Amazon S3 코드 (Amazon 공식 샘플에서 가져옴)는 일반적으로 다음과 같습니다.

AmazonS3 s3 = new AmazonS3Client(...);
...
s3.putObject(new PutObjectRequest(bucketName, project.getName() + "/" + imageFile.getName(), imageFile));

다음은 질문입니다.

고마워.

해결법

  1. ==============================

    1.질문을 분명히 반복하겠습니다.

    질문을 분명히 반복하겠습니다.

    Java SDK의 모든 클라이언트 클래스는 스레드로부터 안전하므로 보통 새로운 클라이언트를 인스턴스화하는 것보다는 단일 클라이언트를 다시 사용하는 것이 좋습니다. 또는 여러 지역 또는 자격 증명을 동시에 운영하는 경우 몇 가지가 있습니다.

    예, AmazonS3Client 대신 TransferManager 클래스를 직접 사용하는 경우 클라이언트에 연결 관리가 있습니다.

    참조 : http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html

    기본적으로 클라이언트는 복구 가능한 오류에 대한 지수 적 백 오프를 사용하여 재 시도합니다. 정말 실패하거나 연결이 끊어지면 앱에 맞게 예외를 처리해야합니다. 참조 : http://docs.aws.amazon.com/general/latest/gr/api-retries.html

    Spring 프로젝트와의 통합을 쉽게하기 위해 선언적 인스턴스 생성, 주입 및 유틸리티 클래스를 제공합니다. 비슷한 방식으로 JDBC, JMS 등을위한 도우미가 있습니다.

    AWS SDK 팁 및 기법에 대한 자세한 내용은 다음을 참조하십시오. http://aws.amazon.com/articles/3604?_encoding=UTF8&jiveRedirect=1

  2. ==============================

    2.다음 두 가지 질문에 유의해야 할 중요한 사항이 있습니다.

    다음 두 가지 질문에 유의해야 할 중요한 사항이 있습니다.

    하나만 만듭니다. AmazonS3Client는 가비지 수집시 다른 AmazonS3Client 인스턴스가 공유하는 리소스를 정리하여 해당 인스턴스가 업로드 또는 다운로드를 처리하는 중임에도 불구하고 해당 인스턴스를 무효화하는 잘못된 기능을 가지고 있습니다. 요청할 때마다 AmazonS3Client를 만들 때이 문제가 발생했습니다. Amazon은 분명히 이것을 버그라고 생각하지 않습니다. 이러한 잘못된 기능은 AmazonS3Client를 하나만 만들고 응용 프로그램의 수명을 유지하며 코드의 모든 스레드에서 사용하여 피할 수 있습니다.

    업로드 및 다운로드는 실패 할 수 있지만 여전히 사용할 수있는 AmazonS3Client는 무효화되지 않습니다. AmazonS3Client에 의해 성공적으로 재 시도되지 않은 단절을 처리하는 올바른 방법은 응용 프로그램에 맞게 재 시도하거나 실패를보고하고 추가로 필요한 S3 상호 작용을 위해 AmazonS3Client를 계속 사용하는 것입니다.

  3. from https://stackoverflow.com/questions/23407515/amazons3-connection-management by cc-by-sa and MIT license