Play scala中ApplicationLifecycle挂钩中的可调用类型错误

Posted

技术标签:

【中文标题】Play scala中ApplicationLifecycle挂钩中的可调用类型错误【英文标题】:Wrong type of callable in ApplicationLifecycle hooks in play scala 【发布时间】:2021-03-15 18:16:14 【问题描述】:

我正在尝试在我们的应用程序(Play Scala)中注册服务停止挂钩。

根据这些文档,它非常简单。 https://www.playframework.com/documentation/2.8.x/PluginsToModules#Create-a-Module-class 应该是这样的:

@Singleton
class AblyService @Inject() (ablyRealtime: AblyRealtime, lifecycle: ApplicationLifecycle) 

  def getChannel(name: String): Channel = ablyRealtime.channels.get(name)

  lifecycle.addStopHook  () =>
    Future.successful(ablyRealtime.close())
  

但是,我收到类型不匹配错误:

[error] /Users/shurikag/ProcessStreet/dev/process-street/app/features/ably/AblyService.scala:15:22: type mismatch;
[error]  found   : scala.concurrent.Future[Unit]
[error]  required: java.util.concurrent.CompletionStage[_]
[error]     Future.successful(ablyRealtime.close())

正确的做法是什么?

【问题讨论】:

【参考方案1】:

猜你使用的是 Java API play.inject.ApplicationLifecycle(需要 CompletionStage)而不是 Scala one(接受 Future)。

【讨论】:

以上是关于Play scala中ApplicationLifecycle挂钩中的可调用类型错误的主要内容,如果未能解决你的问题,请参考以下文章

在 Play2 Scala 模板中声明变量

Play 2.2:使用 Play Caching (Scala) 对代码进行单元测试时出现问题

在 Play 中查看 scala html 模板时出错

Jooq postgre 在 play2.5 scala 中插入错误

在 Play 2.4 scala 中禁用单个测试

如何搭建scala的play框架