【问题标题】:Doobie with Hikari setup带有 Hikari 设置的 Doobie
【发布时间】:2018-07-31 10:00:08
【问题描述】:

我想让 hikari 交易器设置像标准交易器一样工作

val xa = HikariTransactor.newHikariTransactor[IO](
  "com.mysql.jdbc.Driver",
  JdbcUrl,
  Username,
  Password
)

sql"""select DISTINCT gcpProject FROM JobStatus"""
     .query[String]    // Query0[String]
     .stream           // Stream[ConnectionIO, String]
     .take(5)          // Stream[ConnectionIO, String]
     .compile.toList   // ConnectionIO[List[String]]
     .transact(xa)     // IO[List[String]]
     .unsafeRunSync    // List[String]
     .foreach(println) // Unit

不幸的是,这给了我:

Type mismatch, expected: tansactor.Transactor[NotInferedM], actual: IO[hikari.HikariTransactor[IO]]

关于如何使它正常工作的任何想法?

请注意,以前的解决方案每次都使用单个连接并且可以正常工作:

val xa = Transactor.fromDriverManager[IO](
  "com.mysql.jdbc.Driver",
  JdbcUrl,
  Username,
  Password
)

但我真的可以使用连接池。

【问题讨论】:

    标签: mysql database scala hikaricp doobie


    【解决方案1】:

    好的,经过一堆测试,我终于解决了!

    我将在此处发布我的解决方案,以防其他人发现这有帮助:

    val config = new HikariConfig()
    config.setJdbcUrl(JdbcUrl)
    config.setUsername(Username)
    config.setPassword(Password)
    config.setMaximumPoolSize(databaseConnectionPoolSize)
    
    val DbTransactor: IO[HikariTransactor[IO]] =
      IO.pure(HikariTransactor.apply[IO](new HikariDataSource(config)))
    
    sql"""select DISTINCT gcpProject FROM JobStatus"""
         .query[String]
         .stream
         .take(5)
         .compile.toList
    
    val prog = for {
      xa <- transactor
      result <- query.transact(xa)
    } yield result
    prog.unsafeRunSync()
    

    【讨论】:

    • 我试过了,但它抛出了一个错误,新的 HikariDataSource 需要 2 个其他参数:- ExecutionContext 和 Blocker
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2017-04-29
    • 2019-07-13
    • 1970-01-01
    • 2019-10-28
    • 2020-02-05
    • 1970-01-01
    相关资源
    最近更新 更多