当前位置: 首页 > 知识库问答 >
问题:

带有Transfermanager的Spring Cloud AWS:无法完成传输:连接池关闭

上官联
2023-03-14
2017-02-26 12:36:27.004 ERROR 32696 --- [ask-scheduler-8] o.s.integration.handler.LoggingHandler   : com.amazonaws.AmazonClientException: Unable to complete transfer: Connection pool shut down
    at com.amazonaws.services.s3.transfer.internal.AbstractTransfer.unwrapExecutionException(AbstractTransfer.java:277)
    at com.amazonaws.services.s3.transfer.internal.AbstractTransfer.rethrowExecutionException(AbstractTransfer.java:261)
    at com.amazonaws.services.s3.transfer.internal.UploadImpl.waitForUploadResult(UploadImpl.java:66)
    at com.my.package.aws.S3Configuration.withTransferManager(S3Configuration.java:50)
    at sun.reflect.GeneratedMethodAccessor119.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
@EnableContextResourceLoader
@EnableContextCredentials(accessKey="XXXX", secretKey="YYYY")
@EnableAsync
@ComponentScan("com.my.package")
@EnableJpaRepositories(basePackages = "com.my.package.repository")
@EnableScheduling
@SpringBootApplication
public class S3UploadApplication {

    public static void main(final String[] args) {
        SpringApplication.run(S3UploadApplication.class, args);
    }
}
@Configuration
public class S3Configuration {
@Autowired
private AmazonS3Client amazonS3client;

public void withTransferManager() {
TransferManager transferManager = new TransferManager(this.amazonS3client);
ObjectMetadata objectMetadata = new ObjectMetadata();
      objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
Upload uploaded=transferManager.upload("myBucket","test.txt",new FileInputStream(new File("TestFile.txt")),objectMetadata);
uploaded.waitForCompletion();
transferManager.shutdownNow();
 }
}

我也尝试了这个解决方案,即显式地创建两个bean BasicAWSCredentials和AmazonS3Client,并相应地配置它,但仍然显示了相同的错误。

共有1个答案

曾山
2023-03-14

我想你在某个地方关闭了S3客户端。或者与TransferManager相关的代码被调用多次。在aws sdk https://github.com/aws/aws-sdk-java/issues/1282中看到这个问题后

因此,解决方案是在每次需要使用S3 Client和TransferManager时创建一个新的实例,或者不关闭它们。

从这个问题来看,最佳实践似乎是不要关闭S3客户机/传输管理器,因为它提供了更好的性能。

 类似资料:
  • 看来是从到达这里的,我也在我的项目中使用它 但这只是一个假设。问题可能出在别的地方。有什么想法吗?

  • 我的应用程序有两个quartz作业同时从Oracle DB读取两个不同的表。我正在尝试使用c3p0与Hibernate和Oracle从池中获取连接。Tomcat7启动时,C3P0似乎已初始化: 2021-02-15 18:47:26,271[INFO]HibernateEntityManager 3.2.1.GA 2021-02-15 18:47:26,290[INFO]Hibernate注释3.

  • 我使用SpringBoot(V2.3.0.Release)、JPA和Hibernate(带有MySQL数据库)。总的来说,我需要努力提高表演。 是否需要手动配置(同时添加依赖项)连接池?

  • 当我使用CloseableHttpClient和do Execute方法时,它在第一次正常工作,但之后从未成功。它将引发表示“连接池关闭”的异常 有人说是因为我还没有关闭客户端有人说是httpClient 4.3中的bug 我的项目不存在上述问题,但仍然无法正常工作

  • 我正在Java中运行Apache HTTP POST请求,每当我超过1300个请求时,就会出现以下错误,我需要发出更多的请求,大约40k,我可以做些什么来纠正相同的错误?

  • 我正在使用HttpClient v4.5.5 我有一个如下: 然后我使用超文本传输协议客户端如下: 通过定期调用(每隔几分钟) 偶尔我会出错 ,据我所知,这种情况要么发生在旧的HttpClient版本上,要么发生在您关闭HttpClient时。我没有这样做。所以我不明白为什么会出现这个错误。它会恢复,但有这样的异常是个问题。