首页 文章

使用Couchbase 4.5 Play Framework 2.5

提问于
浏览
0

我目前正在使用Play Framework,作为数据库,我想使用Couchbase 4.5(目前处于测试阶段,但不应该是一个问题) .

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

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

任何帮助,将不胜感激!

1 回答

  • 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,它的工作原理!

相关问题