java - 当第 3 方库请求 ExecutorService 时使用 Scala ExecutionContext

标签 java scala amazon-s3 playframework-2.3

我正在使用 Play Framework(Scala 版本)和 Amazon AWS Java SDK 将 Amazon S3 集成到应用程序中。

AWS SDK 有一个 TransferManager 类,它提供了一个抽象来管理线程池,用于处理到 S3 的下载/上传。

我正在尝试确定是否可以将 Play 对自定义 ExecutionContext 的核心支持集成到 SDK 提供的这个对象中。特别是,在实例化 AWS SDK 提供的 TransferManager 时,您可以提供自定义 ExecutorService 作为可选参数。

Scala 的 ExecutionClass 通过其类声明中的“with”关键字绑定(bind) ExecutorService 类,所以我想知道是否有某种机制可以从 ExecutionContext 获取 ExecutorService 对象,例如转换 ExecutionContext => ExecutorService 的方法。

如果不行,有没有其他办法?目前,我只是在此处概述的 Play 标准方法之外的类中直接实例化自定义 ExecutorService:

https://www.playframework.com/documentation/2.3.x/ThreadPools

这感觉很乱,并且违反了框架提供的约定。

感谢您的宝贵时间。

最佳答案

如果您像这样创建您的上下文(不要盲目地复制粘贴它 - 它被配置为阻止操作):

val blockingContext: ExecutionContext = {
    val executor = new ThreadPoolExecutor(100, 100, 1, TimeUnit.MINUTES, new LinkedBlockingQueue(1000))
    executor.allowCoreThreadTimeOut(true)
    ExecutionContext.fromExecutorService(executor) // main part
}

然后你将能够从中获取ExecutorService实例:

val executor: ExecutorService = blockingContext.prepare().asInstanceOf[ExecutorService]

关于java - 当第 3 方库请求 ExecutorService 时使用 Scala ExecutionContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26005304/

相关文章:

java - 如何使用 rawquery 在 Room Library 中创建表?

java - 迁移到 JDK 11 后,Spring Boot 由于 Hibernate 错误而失败

java - 将 2 个 txt 文件中的一些元素合并到第三个文件中

scala - 我应该如何在 spark 文本文件中表达 hdfs 路径?

scala - 遍历 Scala 列表

scala - 如何在多列上使用 spark quantilediscretizer

javascript - 错误 : Missing credentials in config -/nodeapp/node_modules/aws-sdk/lib/request. js:31

java - 尝试使用 Java SDK 从 S3 Bucket 下载文件,isStandardEndpoint 出现空指针异常

java - 如何从一种类型转换为除了包名称之外相同的多种类型?

cordova - Amazon S3 - POST 请求的存储桶策略?