我有一个应用程序,使用scala.play与jdbc连接到一个postgresql数据库和发挥演变,我一直试图迁移到使用光滑,以减少在数据库客户端的样板数量。
按照光滑的文档并没有产生结果,这是令人失望的。
这是我拥有的和我得到的,构建的一部分。
libraryDependencies += "com.typesafe.slick" %% "slick" % "3.4.1"
libraryDependencies +="org.slf4j" % "slf4j-nop" % "1.7.26"
libraryDependencies += "com.typesafe.slick" %% "slick-hikaricp" % "3.4.1"
libraryDependencies += "org.postgresql" % "postgresql" % "42.6.0"
// Better field mappings for Postgres/Slick
libraryDependencies += "com.github.tminglei" %% "slick-pg" % "0.21.1"
libraryDependencies += "com.github.tminglei" %% "slick-pg_circe-json" % "0.21.1"
libraryDependencies += "com.typesafe.play" %% "play-slick" % "5.1.0"
libraryDependencies += "com.typesafe.play" %% "play-slick-evolutions" % "5.1.0"
字符串
application.conf
slick.dbs.app.profile="slick.jdbc.PostgresProfile$"
slick.dbs.app.db.url = "jdbc:postgresql://localhost:5432/app"
slick.dbs.app.db.user="app"
slick.dbs.app.db.password="password"
型
和一类
package com.cask.db
import com.google.inject.Inject
import org.joda.time.DateTime
import slick.jdbc.PostgresProfile.api._
import java.sql.Timestamp
import scala.util.Random
class SlickDBClient @Inject()() extends UsersTable {
val db = Database.forConfig("slick.dbs.app")
def testAdd(): Unit ={
val foo = UserTableRow(None,randomString,randomString,true,"2342","234234","234234",None,Some(12),new Timestamp(DateTime.now().getMillis()),new Timestamp(DateTime.now().getMillis()),None,"",None)
db.run(addUsersQuery.insertOrUpdate(foo))
}
def randomString():String = {
Iterator.continually(Random.nextPrintableChar()).filter(_.isLetterOrDigit).take(8).mkString
}
private lazy val addUsersQuery = users returning users.map(_.id) into (
(f, id) => f.copy(id = Some(id))
)
}
型
冷编译和运行,但没有应用演化,可以毫无例外地调用testadd,但显然它不工作,因为演化没有被应用,以前只使用play和jdbc应用了演化,而没有光滑
我已经把它推到github encase,帮助https://github.com/ArthurGibbs/scalaApp
如果任何人都看代码DatabaseClient是我以前使用的那个,使用jdbc而不使用slick,,我已经设置了di的默认值来使用mock,因为我必须删除一些依赖项,我已经阅读了我不能同时使用slick,SlickDBClient由端点/API/users/testSlick调用
请帮助我理解我错在哪里
编辑,更新后的一些建议
[CreationException: Unable to create injector, see the following errors:
1) [Guice/ErrorInCustomProvider]: RuntimeException: Failed to get driver instance for jdbcUrl=jdbc:postgresql://localhost:5432/app
while locating ApplicationEvolutionsProvider
at EvolutionsModule.<init>(EvolutionsModule.scala:23):
Binding(class ApplicationEvolutions to ProviderConstructionTarget(class ApplicationEvolutionsProvider) eagerly)
\_ installed by: Modules$OverrideModule -> GuiceableModuleConversions$$anon$4
while locating ApplicationEvolutions
型
PostgreSQL版本14.5
1条答案
按热度按时间frebpwbc1#
第一个问题是,
play-slick-evolutions
的测试范围在build.sbt
中。必须从字符串
第二个问题是,您正在使用
application.conf
中的play jdbc datsources config
而不是slick datasources config
。型
文章Play Slick迁移指南-数据库配置有助于了解您的应用为何未运行evolution脚本
在过去的Play Slick版本(使用Slick 2.1或更早版本)中,您通常会像配置Play JDBC插件一样配置Slick插件。现在不再是这种情况,并且Play Slick现在将忽略以下配置:
型
以下是您需要如何迁移上述配置:
型