我有一个使用play-slick的播放应用程序(postgresql) 我想创建另一个akka-http应用程序,该应用程序将是一个带有以下内容的sbt多项目设置:
我的播放应用正在使用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()
}
因此,他们将这个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项目中重用数据库层的方式更改我的代码?