Slick 3.0.0连接池结合Play框架使用最佳实践
Best Practise of Using Connection Pool in Slick 3.0.0 Together with Play Framework
我遵循了Slick 3.0.0-RC1的documentation,使用Typesafe Config作为数据库连接配置。这是我的会议:[=16=]
database = {
driver = "org.postgresql.Driver"
url = "jdbc:postgresql://localhost:5432/postgre"
user = "postgre"
}
我建立了一个文件Locale.scala
为:
package models
import slick.driver.PostgresDriver.api._
import scala.concurrent.Future
case class Locale(id: String, name: String)
class Locales(tag: Tag) extends Table[Locale](tag, "LOCALES") {
def id = column[String]("ID", O.PrimaryKey)
def name = column[String]("NAME")
def * = (id, name) <> (Locale.tupled, Locale.unapply)
}
object Locales {
private val locales = TableQuery[Locales]
val db = Database.forConfig("database")
def count: Future[Int] =
try db.run(locales.length.result)
finally db.close
}
然后我很困惑,何时何地创建数据库 object 使用
val db = Database.forConfig("database")
如果我这样创建 db
,数据库 object 的数量将与我的模型一样多。那么完成这项工作的最佳做法是什么?
您可以创建一个对象 DBLocator 并使用惰性运算符加载它,以便仅在需要时加载它。
您始终可以调用 DBLocator class 中定义的方法来获取 Session 的实例。
我遵循了Slick 3.0.0-RC1的documentation,使用Typesafe Config作为数据库连接配置。这是我的会议:[=16=]
database = {
driver = "org.postgresql.Driver"
url = "jdbc:postgresql://localhost:5432/postgre"
user = "postgre"
}
我建立了一个文件Locale.scala
为:
package models
import slick.driver.PostgresDriver.api._
import scala.concurrent.Future
case class Locale(id: String, name: String)
class Locales(tag: Tag) extends Table[Locale](tag, "LOCALES") {
def id = column[String]("ID", O.PrimaryKey)
def name = column[String]("NAME")
def * = (id, name) <> (Locale.tupled, Locale.unapply)
}
object Locales {
private val locales = TableQuery[Locales]
val db = Database.forConfig("database")
def count: Future[Int] =
try db.run(locales.length.result)
finally db.close
}
然后我很困惑,何时何地创建数据库 object 使用
val db = Database.forConfig("database")
如果我这样创建 db
,数据库 object 的数量将与我的模型一样多。那么完成这项工作的最佳做法是什么?
您可以创建一个对象 DBLocator 并使用惰性运算符加载它,以便仅在需要时加载它。
您始终可以调用 DBLocator class 中定义的方法来获取 Session 的实例。