【问题标题】:How to configure transactor in doobie?如何在 doobie 中配置交易者?
【发布时间】:2019-10-24 09:29:12
【问题描述】:

最近我开始学习 doobie,但我无法创建一个没有错误的 hikari 交易者。我正在使用 mysql,Intellij-Idea。

这是我的 build.sbt 文件

name := "doobie"
version := "0.1"
//scalaVersion := "2.13.1"
scalacOptions += "-Ypartial-unification" // 2.11.9+
libraryDependencies ++= {
  lazy val doobieVersion = "0.8.4"
  Seq(
    "org.tpolecat" %% "doobie-core"      % doobieVersion,
    "org.tpolecat"    %% "doobie-h2"            % doobieVersion,
    "org.tpolecat"    %% "doobie-hikari"        % doobieVersion,
    "org.tpolecat"    %% "doobie-quill"         % doobieVersion,
    "org.tpolecat"    %% "doobie-specs2"        % doobieVersion,
    "org.tpolecat"    %% "doobie-scalatest"     % doobieVersion   % "test",
    "mysql"           % "mysql-connector-java"  % "8.0.17",
    "org.slf4j"       % "slf4j-api"             % "1.7.5",
    "ch.qos.logback"  % "logback-classic"       % "1.0.9"
  )
}

resolvers ++= Seq(
  "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
)

这是我的 Connection.scala 文件

import cats.effect.IO
import com.zaxxer.hikari.{HikariConfig, HikariDataSource}
import doobie.hikari.HikariTransactor

trait Connection {

  val config = new HikariConfig()
  config.setJdbcUrl("jdbc:mysql://localhost:quill_demo")
  config.setUsername("admin")
  config.setPassword("password")
  config.setMaximumPoolSize(5)

  val transactor: IO[HikariTransactor[IO]] =
    IO.pure(HikariTransactor.apply[IO](new HikariDataSource(config)))

}

问题是在上面的文件IO.pure(HikariTransactor.apply[IO](new HikariDataSource(config))) 语句中给出了错误。这里最后一个右大括号中的 3 个给出了 3 个错误,如下所示。

No implicit arguments of type: ContextShift[IO]
Unspecified value parameters: connectEC: ExecutionContext, transactEC: ExecutionContext
No implicits found for parameter evidence$2: ContextShift[IO]

我只想知道,如何正确地做到这一点。

【问题讨论】:

  • 为什么不用Resource来管理transactor呢?看这里tpolecat.github.io/doobie/docs/…
  • 我试过了,还是不行。
  • 奇怪,是什么错误?
  • @gekomad,一些关键字给出“无法解析符号”错误。无论如何,我通过降级版本来解决问题。感谢您的支持。

标签: mysql scala intellij-idea hikaricp doobie


【解决方案1】:

尝试添加以下导入和隐式

import scala.concurrent.ExecutionContext

implicit val cs = IO.contextShift(ExecutionContext.global)

【讨论】:

  • 当我添加以上 2 行时,代码将给出新的错误 Unspecified value parameters: connectEC: ExecutionContext, blocker:Blocker 而不是之前的 3 个错误
【解决方案2】:

如下更改依赖版本后,我可以解决所有错误。

name := "doobie"
version := "0.1"
//scalaVersion := "2.13.1"
scalacOptions += "-Ypartial-unification"
libraryDependencies ++= {
  lazy val doobieVersion = "0.5.4"
  Seq(
    "org.tpolecat" %% "doobie-core"      % doobieVersion,
    "org.tpolecat"    %% "doobie-h2"            % doobieVersion,
    "org.tpolecat"    %% "doobie-hikari"        % doobieVersion,
    "org.tpolecat"    %% "doobie-quill"         % doobieVersion,
    "org.tpolecat"    %% "doobie-specs2"        % doobieVersion,
    "org.tpolecat"    %% "doobie-scalatest"     % doobieVersion   % "test",
    "mysql"           % "mysql-connector-java"  % "5.1.34",
    "org.slf4j"       % "slf4j-api"             % "1.7.5",
    "ch.qos.logback"  % "logback-classic"       % "1.0.9"
  )
}

resolvers ++= Seq(
  "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多