使用Couchbase 4.5 Play Framework 2.5

时间:2016-05-22 20:44:08

标签: scala playframework dependency-injection couchbase

我目前正在使用Play Framework和数据库我想使用Couchbase 4.5(目前处于测试阶段,但不应该成为问题)。

这是我的问题: 在Couchbase文档中,他们建议只使用 CoucbaseCluster 的一个实例,只使用 Bucket 的一个实例。 但是如何在启动时建立这些实例并在所有控制器中全局使用它们。 我已经知道我必须使用依赖注入,但我不知道如何实现这一点。

现在等一下写这个我意识到那些实例的某种全局对象是老派。我必须将这些实例注入我应该使用它们的所有控制器中,对吗?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

所以,经过一些修修补补后我才开始工作:

我用我的桶创建了一个Singleton类

@Singleton
class CouchbaseConnectionPool @Inject() (appLifecycle: ApplicationLifecycle){
  val cluster=CouchbaseCluster.create("127.0.0.1")
  val dataBucket=cluster.openBucket("data")
  val fileBucket=cluster.openBucket("files")
  appLifecycle.addStopHook { () =>
    cluster.disconnect()
    Future.successful(())
  }
}

,控制器看起来像这样

class DirectDBAccess @Inject() (pool:CouchbaseConnectionPool) extends Controller {
  def listAll(dbtype:String) = Action {
    val result:N1qlQueryResult  = pool.dataBucket.query(N1qlQuery.simple("select bucket.* from bucket where type=\""+dbtype+"\""))
    val data=result.allRows().mkString(",")
    val total=result.allRows().length
    val response="{data:["+data+"],total:"+total+"}"

    Ok(response).as("application/json")
  }
}

并最终将它们全部绑定在一起我添加了

bind(classOf[CouchbaseConnectionPool]).asEagerSingleton()

到module.scala,它可以工作!