当第三方库请求ExecutorService时,请使用Scala ExecutionContext

3 java scala amazon-s3 playframework-2.3

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

AWS开发工具包有一个TransferManager类,它提供了一个抽象来管理线程池,以处理下载/上传到S3.

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

Scala的ExecutionClass通过其类声明中的"with"关键字绑定ExecutorService类,所以我想知道是否有一些机制可以从ExecutionContext获取ExecutorService对象,就像转换ExecutionContext => ExecutorService的方法一样.

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

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

这感觉很麻烦,违反了框架提供的惯例.

谢谢你的时间.

Tva*_*roh 5

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

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

然后你就可以从中得到ExecutorService实例:

val executor: ExecutorService = blockingContext.prepare().asInstanceOf[ExecutorService]
Run Code Online (Sandbox Code Playgroud)