【问题标题】:Slick 3 configuration ProvisionException on connecting to the databaseSlick 3 连接数据库时配置 ProvisionException
【发布时间】:2025-11-25 17:40:01
【问题描述】:

我是 slick 新手,正在使用 3.1.1 版本和 playframework 2.4.6 。我在文档 http://slick.typesafe.com/doc/3.1.1/database.html 中遵循本指南。我得到的错误是

***ProvisionException: Unable to provision, see the following errors:

1) Error injecting constructor, java.lang.RuntimeException: java.lang.ClassNotFoundException: 
org.postgresql.ds.PGSimpleDataSource
  at controllers.Application.<init>(Application.scala:12)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:31)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router
1 error***

这是我在 SBT 中首先放的这个

libraryDependencies ++= Seq(
  "com.typesafe.slick" %% "slick" % "3.1.1",
  "org.slf4j" % "slf4j-nop" % "1.6.4"
)

然后在我的 Application.Conf 我把这个

mydb = {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  properties = {
    databaseName = "mydatabasename"
    user = "postgres"
    password = "mypassword"
  }
  numThreads = 10
}

最后在我的控制器中我只有连接字符串 包控制器

import javax.sql.DataSource

import org.mindrot.jbcrypt.BCrypt
import play.api._
import play.api.mvc._
import slick.driver.PostgresDriver.api._
import scala.concurrent.ExecutionContext.Implicits.global


class Application extends Controller {

  val db = Database.forConfig("mydb")
  try {
    // ...
  } finally db.close()




  def index = Action {

    Ok("My First Controller")
  }

}

如您所见,我使用的是 postgres 驱动程序而不是 H2,因为我正在使用 postgres,并且这些凭据是正确的并且经过验证。

【问题讨论】:

    标签: slick slick-2.0 slick-3.0


    【解决方案1】:

    您需要将 slick-hikaricp 和 postgresql 驱动程序依赖项添加到 build.sbt 中。

       "com.typesafe.slick" %% "slick-hikaricp" % "3.1.1",
       "org.postgresql" % "postgresql" % "9.4-1206-jdbc4"
    

    如果您不熟悉 slick,我建议您使用 slick 作为plugin。请看play-slick samples

    【讨论】:

    • 非常感谢