Postgresql 如何为Postgres DB配置Slick 3.0.0(带Hikari或不带Hikari)类型安全播放配置

Postgresql 如何为Postgres DB配置Slick 3.0.0(带Hikari或不带Hikari)类型安全播放配置,postgresql,scala,playframework,slick,Postgresql,Scala,Playframework,Slick,我有一个测试应用程序,可以与内存中的H2数据库配合使用。现在我正试图把它连接到我们真正的数据库。根据我的方法,我要么得到一个内部平滑异常,要么得到一个“没有合适的驱动程序”异常: 下面是我的简单测试(同样,在记忆中,它似乎工作得很好): 如果打开连接池,如下所述: db.edb = { driver = org.postgresql.Driver url = "jdbc:postgresql://db-server-1.hyrax.com:5444/CI_0" user

我有一个测试应用程序,可以与内存中的H2数据库配合使用。现在我正试图把它连接到我们真正的数据库。根据我的方法,我要么得到一个内部平滑异常,要么得到一个“没有合适的驱动程序”异常:

下面是我的简单测试(同样,在记忆中,它似乎工作得很好):

如果打开连接池,如下所述:

db.edb = {
    driver = org.postgresql.Driver
    url = "jdbc:postgresql://db-server-1.hyrax.com:5444/CI_0"
    user = "xxx" // masked to protect the innocent
    password = "xxx" // masked to protect the innocent
    keepAliveConnection = true
    // connectionPool = disabled
}
我最终得到以下异常。在试图解释发生了什么时,我首先启用了一个连接池(如“connectionPool=enabled”或只是注释该行)。这导致了更多的问题和一个非常非常长的异常(如本文末尾所示)

这一例外的主要原因是:

[错误][错误]java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig[错误]由以下原因引起 java.lang.ClassNotFoundException:com.zaxxer.hikari.HikariConfig

这对我来说毫无意义。。。因为再一次,它在记忆中运行得很好

以下是专为博士后设计的build.sbt驱动程序:

"org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
以下是完全例外。。。我已经按照跟踪末尾的建议将其发布到github:

[错误][错误]java.lang.NoClassDefFoundError: com/zaxxer/hikari/HikariConfig[错误]由以下原因引起 java.lang.ClassNotFoundException:com.zaxxer.hikari.HikariConfig [错误][错误]堆栈跟踪[错误]
flick.jdbc.HikariCPJdbcDataSource$.forConfig(JdbcDataSource.scala:141) [错误]
flick.jdbc.HikariCPJdbcDataSource$.forConfig(JdbcDataSource.scala:135) [错误]
slick.jdbc.JdbcDataSource$.forConfig(JdbcDataSource.scala:35)[错误] slick.jdbc.JdbcBackend$DatabaseFactoryDef$class.forConfig(JdbcBackend.scala:223) [错误]
slick.jdbc.JdbcBackend$$anon$3.forConfig(JdbcBackend.scala:33)[错误] models.TestGlimpleModel$$anonfun$1$$anonfun$apply$64$$anonfun$apply$65.apply(TestGlimpleModel.scala:166) [错误]
models.TestGlimpleModel$$anonfun$1$$anonfun$apply$64$$anonfun$apply$65.apply(TestGlimpleModel.scala:158) [错误]
org.specs2.matcher.MatchResult$$anon$12$$anonfun$asResult$1.apply(MatchResult.scala:310) [错误]
org.specs2.matcher.MatchResult$$anon$12$$anonfun$asResult$1.apply(MatchResult.scala:310) [错误]
org.specs2.execute.ResultExecution$class.execute(ResultExecution.scala:25) [错误]
org.specs2.execute.ResultExecution$.execute(ResultExecution.scala:120) [错误]
org.specs2.execute.Result$$anon$10.asResult(Result.scala:230)[错误] org.specs2.execute.AsResult$.apply(AsResult.scala:25)[错误]
org.specs2.matcher.MatchResult$$anon$12.asResult(MatchResult.scala:310) [错误]org.specs2.execute.AsResult$.apply(AsResult.scala:25) [错误]
org.specs2.main.CommandLineAsResult$$anon$1.asResult(CommandLineAsResult.scala:17) [错误]
org.specs2.main.CommandLineAsResult$$anonfun$apply$1.apply(CommandLineAsResult.scala:21) [错误]
org.specs2.main.CommandLineAsResult$$anonfun$apply$1.apply(CommandLineAsResult.scala:21) [错误]
org.specs2.specification.dsl.mutable.exampleds1$BlockExample$$anonfun$$morerar$morerar$1.apply(ExampleDsl.scala:39) [错误]
org.specs2.specification.dsl.mutable.exampleds1$BlockExample$$anonfun$$morerar$morerar$1.apply(ExampleDsl.scala:39) [错误]
org.specs2.specification.core.Execution$$anonfun$withEnv$1$$anonfun$apply$3.apply(Execution.scala:120) [错误]
org.specs2.execute.ResultExecution$class.execute(ResultExecution.scala:25) [错误]
org.specs2.execute.ResultExecution$.execute(ResultExecution.scala:120) [错误]
org.specs2.execute.Result$$anon$10.asResult(Result.scala:230)[错误] org.specs2.execute.AsResult$.apply(AsResult.scala:25)[错误]
org.specs2.specification.core.Execution$$anonfun$withEnv$1.apply(Execution.scala:120) [错误]
org.specs2.specification.core.Execution$$anonfun$withEnv$1.apply(Execution.scala:120) [错误]
org.specs2.specification.core.Execution$$anonfun$execute$2$$anonfun$apply$2.apply(Execution.scala:70) [错误]
org.specs2.specification.core.Execution$$anonfun$execute$2$$anonfun$apply$2.apply(Execution.scala:70) [错误]
org.specs2.specification.core.Execution.setResult(Execution.scala:76) [错误]
org.specs2.specification.core.Execution$$anonfun$execute$2.apply(Execution.scala:70) [错误]
org.specs2.specification.core.Execution$$anonfun$execute$2.apply(Execution.scala:70) [错误]scala.Option.fold(Option.scala:158)[错误]
org.specs2.specification.core.Execution.execute(Execution.scala:70) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$executeFragment$1$$anonfun$apply$6.apply(Executor.scala:132) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$executeFragment$1$$anonfun$apply$6.apply(Executor.scala:130) [错误]
org.specs2.specification.core.Fragment.updateExecution(Fragment.scala:44) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$executeFragment$1.apply(Executor.scala:130) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$executeFragment$1.apply(Executor.scala:129) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$sequencedExecution$1.executedFragment$lzycompute$1(Executor.scala:104) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$sequencedExecution$1.org$specs2$specification$process$DefaultExecutor$class$$anonfun$$executefragment$1(Executor.scala:104) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$sequencedExecution$1$$anonfun$3.apply(Executor.scala:109) [错误]
org.specs2.specification.process.DefaultExecutor$$anonfun$sequencedExecution$1$$anonfun$3.apply(Executor.scala:109) [错误]
scalaz.concurrent.Task$$anonfun$delay$1.apply(Task.scala:272)[错误] scalaz.concurrent.Task$$anonfun$delay$1.apply(Task.scala:272)[错误] sc
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
database {
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  properties = {
    databaseName = "some_db"
    user = "local"
    password = "local"
  }
  numThreads = 10
}
libraryDependencies ++= Seq(
  "com.typesafe.slick" %% "slick" % "3.0.0",
  "com.zaxxer" % "HikariCP" % "2.4.1",
  "org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
  // ...
)
Database.forConfig("database")
play.modules.enabled += "modules.DatabaseModule"

MyNameIs = {
  database = {
  driver = org.postgresql.Driver
  url = "jdbc:postgresql://localhost:5432/databasename"
  user = "postgreuser"
  password = ""
  numThreads = 10
  connectionTimeout = 5000
  validationTimeout = 5000
}

dispatcher {
  fork-join-executor {
    parallelism-factor = 2
    parallelism-max = 20
  }
}
import javax.inject.{Provider, Inject, Singleton}

import com.google.inject.AbstractModule
import com.typesafe.config.Config
import play.api.inject.ApplicationLifecycle
import play.api.{Configuration, Environment}
import slick.jdbc.JdbcBackend

import scala.concurrent.Future

class DatabaseModule(environment: Environment, configuration: Configuration)     
  extends AbstractModule {
override def configure(): Unit = {
  bind(classOf[Config]).toInstance(configuration.underlying)
  bind(classOf[slick.jdbc.JdbcBackend.Database]).toProvider(classOf[DatabaseProvider])
  bind(classOf[models.UserDAO]).asEagerSingleton()

  }
}

@Singleton
class DatabaseProvider @Inject() (config: Config, lifecycle: ApplicationLifecycle) extends Provider[slick.jdbc.JdbcBackend.Database] {

  private val db = slick.jdbc.JdbcBackend.Database.forConfig("MyNameIs.database", config)

  lifecycle.addStopHook { () =>
    Future.successful(db.close())
  }

  override def get(): JdbcBackend.DatabaseDef = db
}
import java.sql.Date
import javax.inject.{Inject, Singleton}

import com.typesafe.config.Config
import slick.driver.PostgresDriver.api._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global

case class User(id: Option[Long] = None, name: String, firstname: String,    email: String, password: String, birthday: Option[Date] = None, signDate: Option[Date] = Some(new Date(System.currentTimeMillis)))

@Singleton
class UserDAO @Inject()(config: Config, db: Database) {


  private val users = TableQuery[Users]

  override def delete(ids: Long*): Future[Boolean] = {
    Future.sequence(for (id <- ids) yield {
      db.run(users.filter(_.id === id).delete).map(_ == 1)
    }).map {
      _.find(i => i == false) == None
    }
  }

  def insert(user: User): Future[Unit] = db.run(users += user).map{()}

  override def update(obj: User): Future[Boolean] = ???

  override def create(obj: User): Future[Boolean] = db.run(users += obj).map(_ == 1)

  override def all: Future[Seq[User]] = db.run(users.result)

  private class Users(tag: slick.lifted.Tag) extends Table[User](tag, "user") {


    type S = String
    type D = Date
    type L = Long
    // attribute name in table database
    def id = column[L](ID, O.AutoInc, O.PrimaryKey)

    def name = column[S](NAME)

    def password = column[S](PASSWORD)

    def firstname = column[S](FIRSTNAME)

    def email = column[S](EMAIL)

    def birthday = column[D](BIRTHDAY)

    def signDate = column[D](SIGN_DATE)

    override def * = (id.?, name, firstname, email, password, birthday.?, signDate.?) <> ((User.apply _)
  .tupled, User.unapply _)
  }

}
@Singleton
class Application @Inject()(userdao: UserDAO) extends Controller { code } 
# Home page
GET     /                           @controllers.Application.index
myDb = {
  connectionPool = "HikariCP"
  dataSourceClass = org.postgresql.ds.PGSimpleDataSource
  properties = {
    url = "jdbc:postgresql://"${dbHostName}":"${dbPortNumber}"/"${dbName}
    user = "postgres"
    password = "1"
  }
  numThreads = 10
  minConnections = 10
  maxConnections = 50
  queueSize = 1000
}