我想知道如何在 Play Framework 2.3.x 应用程序中管理 Slick 3(此时为 3.0.0-RC3)数据库实例的正确方法。根据升级指南,每个实例都有一个关联的连接池。
我的猜测是我应该在整个应用程序中处理每个真实数据库的单个实例,而不是为每个数据库操作创建一个实例(如本例),因为后者意味着还要为每个操作创建一个池。如果我按照示例执行此操作:
object Thing {
private def db: Database = Database.forConfig("mydb")
private val things = TableQuery[Thing]
def getAll = {
val curDb = db
try curDb.run(things.result)
finally curDb.close
}
}
我最终创建了一个池,该池在每次执行该getAll
函数时创建 10 个与数据库的连接,并在一次查询后处理它们。
但是,如果我将实例作为单例进行管理,我不确定它是否是线程安全的,并且可以被 Play 应用程序管理的许多线程安全地使用。
这是我在 application.conf 中的数据库配置:
mydb= {
dataSourceClass = org.postgresql.ds.PGSimpleDataSource
connectionTestQuery="SELECT 1"
properties = {
databaseName = "mydb"
user = "postgres"
password = "postgres"
serverName = "localhost"
}
numThreads = 10
connectionPool = HikariCP
}
我正在使用 HikariCP-java6 v2.0.1。