使用play和akka-http项目共享我的数据库层

时间:2017-01-14 23:42:39

标签: scala playframework sbt akka-http

我有一个使用play-slick的播放应用程序(postgresql) 我想创建另一个akka-http应用程序,该应用程序将是一个带有以下内容的sbt多项目设置:

  1. 播放应用程序
  2. akka http
  3. 共享数据库,播放和akka http将使用
  4. 我的播放应用正在使用Play-slick,而我的DAO / table类看起来像这样:

    @Singleton
    class AccountDAO @Inject() (protected val dbConfigProvider: DatabaseConfigProvider)
      extends HasDatabaseConfigProvider[JdbcProfile] {
      import driver.api._
    
      private val accounts = TableQuery[AccountsTable]
    
        def id = column[Int]("id", O.PrimaryKey)
      def name = column[String]("name")
    
      def * = ....
    }
    

    现在我很困惑如何在我的akka​​-http项目中使用这个相同的对象,因为它不会使用play-slick库, 而且DatabaseConfigProvider似乎是来自Play-slick库。

    我查看了一个我喜欢的akka​​-http模板,但他们的浏览方式不同:

    class DatabaseService(jdbcUrl: String, dbUser: String, dbPassword: String) {
      private val hikariConfig = new HikariConfig()
      hikariConfig.setJdbcUrl(jdbcUrl)
      hikariConfig.setUsername(dbUser)
      hikariConfig.setPassword(dbPassword)
    
      private val dataSource = new HikariDataSource(hikariConfig)
    
      val driver = slick.driver.PostgresDriver
      import driver.api._
      val db = Database.forDataSource(dataSource)
      db.createSession()
    }
    

    github Reference

    因此,他们将这个DatabaseService类作为参数传递到他们的DAO / Service层,如:https://github.com/ArchDev/akka-http-rest/blob/master/src/main/scala/me/archdev/restapi/services/UsersService.scala#L9

    他们的表格就像UserEntityTable

    一样

    是否有可能以我可以在play和akka-http项目中重用数据库层的方式更改我的代码?

0 个答案:

没有答案