我正在使用Play Framework(Scala版本)和Amazon AWS Java SDK将Amazon S3集成到应用程序中。
AWS SDK有一个TransferManager类,它提供了一个抽象来管理线程池,以处理下载/上传到S3。
我正在尝试确定是否可以将自定义ExecutionContexts的核心支持Play集成到SDK提供的此对象中。特别是,在实例化AWS SDK提供的TransferManager时,您可以提供自定义ExecutorService作为可选参数。
Scala的ExecutionClass通过"与"绑定ExecutorService类。关键字在其类声明中,所以我想知道是否有一些机制从ExecutionContext获取ExecutorService对象,就像转换ExecutionContext =>的方法一样。 ExecutorService的。
如果没有,还有其他方法吗?目前,我只是在Play的标准方法之外的类中直接实例化自定义ExecutorService,如下所述:
https://www.playframework.com/documentation/2.3.x/ThreadPools
这让人感到麻烦,违反了框架提供的惯例。
感谢您的时间。
答案 0 :(得分:5)
如果您创建这样的上下文(不要盲目地复制粘贴 - 它已配置为阻止操作):
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]
答案 1 :(得分:0)
ExecutionContext的一些实现实现ExecutionContextExecutorService trait,它是ExecutionContext和ExecutorService的子接口。你可以检查一下你从Play / Akka获得的ExecutionContext是否是其中之一。