带有Transfermanager的Spring Cloud AWS:无法完成传输:连接池已关闭 [英] Spring Cloud AWS with Transfermanager : Unable to complete transfer: Connection pool shut down

查看:110
本文介绍了带有Transfermanager的Spring Cloud AWS:无法完成传输:连接池已关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在将 Spring Boot 1.5.1.RELEASE Spring Cloud AWS 1.1.3.RELEASE 一起使用,以将文件上传到AWS S3存储桶.

I am using Spring Boot 1.5.1.RELEASE with Spring Cloud AWS 1.1.3.RELEASE to upload files to the AWS S3 bucket.

我想使用

I wanted to use the TransferManager to upload the files to the S3. But unfortunately, I am getting the following error message during the upload and the files are not uploaded to the S3:

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)

这些是我的Java配置文件:

These are my Java config files :

@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);
    }
}

还有S3的配置bean:

And the configuration bean for S3 with :

@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();
 }
}

我还尝试了解决方案,该解决方案是显式创建两个Beans BasicAWSCredentials和AmazonS3Client并相应地对其进行配置,但是仍然显示相同的错误.

I also tried this solution , that is creating the two Beans BasicAWSCredentials and the AmazonS3Client explicitly and configuring it acorrdingly, but still the same error is shown.

推荐答案

从上面的代码中,单个AmazonS3客户端被重用 在其中为每个s3操作transfermanager对象创建一个. Shutdownnow()方法将关闭传输管理器以及AmazonS3客户端.

From above code, a single AmazonS3 client is reused where in for every s3 operation transfermanager object is created. Shutdownnow() method closes the transfermanager as well as AmazonS3 client.

因此,AmazonS3客户端无法再次重用.

Thus AmazonS3 client can't be reused again.

aws的关机方法文档:

Document of shutdown method from aws:

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

代替shutdownnow(),请尝试使用shutdownnow(false),它将仅关闭传输管理器,因此仍可以使用AmazonS3客户端.

Instead of shutdownnow (), try using shutdownnow(false) which will only close the transfermanager and thus AmazonS3 client still can be used.

这篇关于带有Transfermanager的Spring Cloud AWS:无法完成传输:连接池已关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆