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

2024-05-06

我在用Spring Boot 1.5.1.RELEASE with 春季云AWS 1.1.3.RELEASE将文件上传到 AWS S3 存储桶。

我想用转账管理器 http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/transfer/TransferManager.html将文件上传到 S3。 但不幸的是,我在上传过程中收到以下错误消息,并且文件未上传到 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 配置文件:

@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 为:

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

我也尝试过这个解决方案 https://stackoverflow.com/a/37317917/7624898,即显式创建两个 Bean BasicAWSCredentials 和 AmazonS3Client 并进行相应配置,但仍然显示相同的错误。


从上面的代码中,重复使用了单个 AmazonS3 客户端 其中,对于每个 s3 操作,都会创建 TransferManager 对象。 Shutdownnow() 方法关闭传输管理器以及 AmazonS3 客户端。

因此AmazonS3客户端不能再次重复使用。

aws的关闭方法文档:

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

尝试使用 shutdownnow(false) 而不是 shutdownnow (),这只会关闭传输管理器,因此 AmazonS3 客户端仍然可以使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Cloud AWS 与 Transfermanager:无法完成传输:连接池关闭 的相关文章

随机推荐

  • 删除核心数据中的对象

    我的核心数据模型中有一个实体 如下所示 interface Selection NSManagedObject property nonatomic retain NSString book id property nonatomic re
  • 如何BSWAP 64位寄存器的低32位?

    我一直在寻找如何将 BSWAP 用于 64 位寄存器的低 32 位子寄存器的答案 例如 0x0123456789abcdef位于 RAX 寄存器内 我想将其更改为0x01234567efcdab89用一条指令 因为性能 所以我尝试了以下内联
  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include
  • iOS 中的随机颜色

    我想让我的导航栏每次加载时都具有不同的颜色 我在 viewDidApear 中放置了以下代码 CGFloat hue arc4random 256 256 0 0 0 to 1 0 CGFloat saturation arc4random
  • JQuery 从 Div 中抓取文本减去子元素[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以从这个 div 中获取文本而不获取任何子元素 div strong Title Text Unwanted strong This is the text I need div 我知道我可
  • Chrome 无法识别我对 javascript 文件的更改并加载旧代码?

    我在这里坐了将近一个小时来测试我正在构建的网站 由于我想查看代码中的新更改 因此我重新加载了代码 但它正在重新加载旧代码 我打开了 devetools 进行硬重新加载和清空缓存硬重新加载 它们都加载我的旧代码 我进入隐身模式 它做了同样的事
  • 检测 Android 中 OSM Mapview 是否仍在加载

    我已将 Open Street Maps 包含在我的 Android 应用程序中 在地图视图中 用户应该能够在地图完全加载后捕获屏幕 但目前 即使地图视图仍在加载 用户也可以捕获图像 有人可以告诉我如何检测地图视图何时完全加载吗 下面是我加
  • 将 dataGridView 绑定到绑定列表并按文本框过滤行

    我正在开发一个 Winforms 应用程序 并且有一个已经绑定到 dataGridView 的对象的 BindingList 我还有一个 过滤器 文本框 如果它们与文本框文本不匹配 我想从 datagridview 行中过滤掉行 我想以某种
  • 更改 RabbitMQ 队列中的参数

    我有一个 RabbitMQ 队列 最初声明如下 var result channel QueueDeclare NewQueue true false false null 我正在尝试添加死信交换 因此我将代码更改为 channel Exc
  • 从字符串渲染 React 组件

    我在字符串中有一些 React 代码 例如 const component function App return div test div 我希望能够从浏览器内渲染该组件 例如 import React Component from re
  • 如何使用 Solr 索引 pdf 内容?

    我正在尝试使用 SolrJ 索引一些 pdf 文档 如下所述http wiki apache org solr ContentStreamUpdateRequestExample http wiki apache org solr Cont
  • 如何测试抽象类的受保护抽象方法?

    我一直在研究测试名为的抽象类的最佳方法TabsActionFilter 我保证继承自的类TabsActionFilter将有一个名为GetCustomer 在实践中 这种设计似乎效果很好 我遇到的一些问题是弄清楚如何测试OnActionEx
  • 如何在 Mac OS X 上的 postgres 中安装 tablefunc?

    我使用 StackBuilder 在我的 Mac OS X 计算机上安装 Postgres 9 2 现在需要使用tablefunc 貌似该功能不可用 如何在 Mac 上安装 contrib 包 正如 a horse with no name
  • 如何在 Ruby 中使用全局变量或常量值?

    我有一个看起来像这样的程序 offset Point new 100 200 def draw point pointNew offset point drawAbsolute point end draw Point new 3 4 指某
  • 获取数组的第一个元素

    我有一个数组 array 4 gt apple 7 gt orange 13 gt plum 我想获取这个数组的第一个元素 预期结果 字符串apple 要求一 它不能通过引用传递来完成 so array shift这不是一个好的解决方案 我
  • Perl:避免从标准输入贪婪读取?

    考虑以下 perl 脚本 read pl my line
  • 单个函数的 Numpy 均值和方差?

    使用 Numpy Python 是否可以从单个函数调用返回均值 AND 方差 我知道我可以单独做它们 但是计算样本标准差需要平均值 因此 如果我使用单独的函数来获取均值和方差 则会增加不必要的开销 我尝试在这里查看 numpy 文档 htt
  • 在开始工作之前忘记在 GitHub 上进行 fork

    假设我将 C 公司的 X 项目存储库从 github 克隆到我的本地计算机 我在本地为自己创建一个分支 对其进行一些工作并在本地提交到我的分支 现在我想向 C 公司发出拉取请求 但我意识到我应该在 gitub 上进行分叉以创建我自己的项目
  • Calendar.getActualMaximum(Calendar.WEEK_OF_YEAR) 怪异

    要么我不明白这个方法getActualMaximum int 或字段 WEEK OF YEAR 或者涉及 Sun bug 或全部三个 有人可以向我解释为什么吗 至少在德国语言环境中 以下代码 Locale setDefault Locale
  • Spring Cloud AWS 与 Transfermanager:无法完成传输:连接池关闭

    我在用Spring Boot 1 5 1 RELEASE with 春季云AWS 1 1 3 RELEASE将文件上传到 AWS S3 存储桶 我想用转账管理器 http docs aws amazon com AWSJavaSDK lat