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

问题描述 投票:3回答:3

SO上有100个关于如何将光滑连接到Mysql的线程,所有这些线程都使用“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")

但我得到一个例外

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)

我尝试了很多其他组合,但似乎没有什么能适用于新课程。那么当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)
scala slick slick-3.0
3个回答
2
投票

documentation建议把它放在你的配置中:

profile = "slick.jdbc.MySQLProfile$"

注意行尾的$

另外,将以下内容添加到enable connection pooling

dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"

7
投票

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

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")

1
投票

使用HikariCP池

application.conf

slick {
  profile = "slick.jdbc.MySQLProfile$"
  db {
    connectionPool = "HikariCP"
    url = "jdbc:mysql://127.0.0.1/abc"
    user = "user"
    password = "passabc"
    driver = "com.mysql.cj.jdbc.Driver"
    numThreads = 5
    maxConnections = 5
    minConnections = 1
  }
}

build.sbt

"com.typesafe.slick" %% "slick" % slickVersion,
"com.typesafe.slick" %% "slick-hikaricp" % slickVersion,
"mysql" % "mysql-connector-java" % "8.0.15",
© www.soinside.com 2019 - 2024. All rights reserved.