scala Slick不运行EvolutionswithPlayFramework

sirbozc5  于 6个月前  发布在  Scala
关注(0)|答案(1)|浏览(71)

我有一个应用程序,使用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

frebpwbc

frebpwbc1#

第一个问题是,play-slick-evolutions的测试范围在build.sbt中。必须从

libraryDependencies += "com.typesafe.play" %% "play-slick-evolutions" % "5.1.0" % Test

字符串
第二个问题是,您正在使用application.conf中的play jdbc datsources config而不是slick datasources config

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"


文章Play Slick迁移指南-数据库配置有助于了解您的应用为何未运行evolution脚本
在过去的Play Slick版本(使用Slick 2.1或更早版本)中,您通常会像配置Play JDBC插件一样配置Slick插件。现在不再是这种情况,并且Play Slick现在将忽略以下配置:

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"
db.default.user=sa
db.default.password=""


以下是您需要如何迁移上述配置:

slick.dbs.default.profile="slick.jdbc.H2Profile$" # You must provide the > required Slick profile! 
slick.dbs.default.db.driver=org.h2.Driver
slick.dbs.default.db.url="jdbc:h2:mem:play"
slick.dbs.default.db.user=sa
slick.dbs.default.db.password=""

相关问题