scala - 使用 slick.jdbc.MySQLProfile 将 Slick 3.2.1 连接到 MySQL

标签 scala slick slick-3.0

关于如何将 slick 连接到 Mysql 的 SO 上有 100 个线程,并且所有线程都使用“slick.driver.MySQLDriver$”。我相信这个类现在已被弃用,并已被“slick.jdbc.MySQLProfile”取代

这已在此处的产品文档中说明

http://slick.lightbend.com/doc/3.2.1/api/#slick.driver.package

因此,为了使用新类,我将配置定义为

mysql = {
  driver = "slick.jdbc.MySQLProfile"
  properties = {
    driver = "com.mysql.cj.jdbc.Driver"
    url  = "jdbc:mysql://localhost:3306/foo"
    user = "foo"
    password = "bar"
  }
}

Database.forConfig("mysql")

但我得到一个异常(exception)
java.lang.RuntimeException: Failed to load class of driverClassName slick.jdbc.MySQLProfile
        at com.zaxxer.hikari.HikariConfig.setDriverClassName(HikariConfig.java:323)
        at slick.jdbc.hikaricp.HikariCPJdbcDataSource$.$anonfun$forConfig$3(HikariCPJdbcDataSource.scala:31)
        at slick.jdbc.hikaricp.HikariCPJdbcDataSource$.$anonfun$forConfig$3$adapted(HikariCPJdbcDataSource.scala:31)
        at scala.Option.map(Option.scala:146)
        at slick.jdbc.hikaricp.HikariCPJdbcDataSource$.forConfig(HikariCPJdbcDataSource.scala:31)

我尝试了许多其他组合,但似乎对新类(class)没有任何作用。那么当 slick.driver.MySQLDriver$ 被弃用时,现在连接的正确方法是什么?

这是来自 build.sbt 的我的 libraryDependencies
"com.typesafe.slick" %% "slick" % "3.2.1",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.1",
"com.typesafe.slick" %% "slick-codegen" % "3.2.1",
"mysql" % "mysql-connector-java" % "5.1.34",

是的,我确实需要连接池。

编辑:根据下面的建议,我将配置更改为
mysql = {
  profile = "slick.jdbc.MySQLProfile$"
  properties = {
    driver = "com.mysql.cj.jdbc.Driver"
    url  = "jdbc:mysql://local:3306/foo"
    user = "foo"
    password = "bar"
  }
}

但现在我得到错误
java.lang.IllegalArgumentException: dataSource or dataSourceClassName or jdbcUrl is required.
        at com.zaxxer.hikari.HikariConfig.validate(HikariConfig.java:786)
        at com.zaxxer.hikari.HikariDataSource.<init>(HikariDataSource.java:67)
        at slick.jdbc.hikaricp.HikariCPJdbcDataSource$.forConfig(HikariCPJdbcDataSource.scala:58)
        at slick.jdbc.hikaricp.HikariCPJdbcDataSource$.forConfig(HikariCPJdbcDataSource.scala:21)

最佳答案

如果有人需要,这是完整的工作配置

mysql = {
  profile = "slick.jdbc.MySQLProfile$"
  dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
  properties = {
    driver = "com.mysql.cj.jdbc.Driver"
    url  = "jdbc:mysql://localhost:3306/foo"
    user = "foo"
    password = "bar"
  }
}

完整的build.sbt
"com.typesafe.slick" %% "slick" % "3.2.1",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.1",
"com.typesafe.slick" %% "slick-codegen" % "3.2.1",
"mysql" % "mysql-connector-java" % "5.1.34",

使用建立的连接
Database.forConfig("mysql")

关于scala - 使用 slick.jdbc.MySQLProfile 将 Slick 3.2.1 连接到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46169138/

相关文章:

python - Spark 和 PySpark 之间是否存在功能对等

scala - 如何解决 DataSet.toJSON 与结构化流不兼容的问题

scala - Slick、UUID 和 Postgres

postgresql - Macaddr/Inet 类型的 postgres in slick

postgresql - Slick run 方法返回的 Future 在插入行之前成功完成

sql - 优化 Slick 生成的 SQL 查询

scala - 从 scala 中的嵌套 json 文件创建 spark 数据框

scala - 从时间戳范围中获取开始日期和结束日期

scala - Slick - 更新完整对象或超过 22 列

scala - Slick 3.1,左连接和过滤器