【发布时间】:2021-11-09 11:26:39
【问题描述】:
我在 spring 应用程序中使用 s3 AWS 客户端将文件上传到 s3,但有时我会收到错误,
com.amazonaws.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool
com.amazonaws.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool
Caused by: org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
因此,作为解决方案,我使用了以下方法,它现在有效。
@Bean
public AmazonS3 s3Client() {
return AmazonS3ClientBuilder
.standard()
.withClientConfiguration(new ClientConfiguration()
.withMaxConnections(100)
.withConnectionTimeout(100)
.withMaxErrorRetry(5))
.build();
}
public String uploadFile() {
// upload code
}
我已将其创建为 Spring Bean。但我在多线程环境中使用它。所以会同时有很多并发请求。我看到AmazonS3ClientBuilder 用@NotThreadSafe 注释。所以我需要知道在多线程中使用它作为bean是否可以,否则我应该在同一个uploadFile方法中使用上面的代码块吗?谁能解释我最好的方法?谢谢
【问题讨论】:
标签: java spring-boot amazon-s3 aws-java-sdk