我有一个测试应用程序,与H2内存数据库工作正常。现在我正试着把它连接到我们真正的数据库。我要么得到一个内部Slick异常,要么得到一个“没有合适的驱动程序”异常,这取决于我的方法:
下面是我的简单测试(同样,在记忆中,它似乎工作得很好):
"The glimple data model classes" should {
"insert a glimple row in the database" in {
val db = Database.forConfig("db.edb") // works on db.h2mem1
val glimples = TableQuery[GPGlimpleModel]
val insertGlimples = db.run(glimples += GPGlimple(None, None, 1, true, true, 1))
val count = Await.result(insertGlimples, Duration.Inf)
println(count)
count must beEqualTo(1)
...
如果我打开连接池,如下所示:
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[error]由java引起。lang.ClassNotFoundException:com。扎克塞尔。希卡里。HikariConfig
这对我来说毫无意义...因为同样,它在记忆中工作得很好。
这是构建。Postgres的sbt驱动线:
"org.postgresql" % "postgresql" % "9.4-1201-jdbc41",
以下是完全例外。。。我已经按照跟踪末尾的建议将其发布到github:
带有PGSimpleDataSource
和指定连接池大小的我的配置:
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
}
我的工作示例:
应用形态
database {
dataSourceClass = org.postgresql.ds.PGSimpleDataSource
properties = {
databaseName = "some_db"
user = "local"
password = "local"
}
numThreads = 10
}
建筑sbt
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")
使用Java7,Scala2.11。6和sbt 0.13。6.
一个在应用程序上具有基本用户的解决方案。形态
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
}
}
在dir应用程序上,您可以创建如下数据库模块
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
}
在应用程序/模型:UserDAO
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 _)
}
}
控制器Application.scala
@Singleton
class Application @Inject()(userdao: UserDAO) extends Controller { code }
和路由文件:
# Home page
GET / @controllers.Application.index
问题内容: 我想在Spring 4.0.3上下文中使用Hikari CP ,但似乎我缺少了一些东西。 我的bean配置如下所示: 但我有一个例外: 我试图使用HSQL org.hsqldb.jdbc.JDBCDataSource配置dataSourceClassName 那样: 也这样: 两次我都有以下异常: 有人可以向我展示 可以与HSQL DB* 一起使用的 Hikari CP Spring
我试图输出到一个Kinesis流,或一个S3文件。什么都没有记录。 我还尝试写到一个HDFS文件。在本例中,创建了一个文件,但大小为0。我确信输入文件已经使用一个简单的检查进行了处理: 它生成了一个异常。 我在这里漏掉了什么?
有人成功地在Spring Boot应用程序中配置了两个具有不同数据源的hikari连接池吗?如何使用application.properties来完成?
问题内容: 我使用64位整数内的位存储标志。 我想知道是否有单个位设置了64位整数中的任何位置(我不在乎任何特定位的位置)。 我可以使用 Bit Twiddling Hacks (由Sean Eron Anderson 撰写) 来计数位数,但是我想知道什么是最有效的方法来检测是否设置了一位。 以及一些维基百科页面: 找到第一个 位操作 汉明重量 注意:我的应用程序是用Java编写的,但是我对使用其
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1