Scala Akka Streams用于MySQL流媒体的Hikari连接池

Scala Akka Streams用于MySQL流媒体的Hikari连接池,scala,akka-stream,hikaricp,slick-3.0,Scala,Akka Stream,Hikaricp,Slick 3.0,我使用Slick 3和Akka Streams从mysql传输数据 这就是我构建源代码的方式 import slick.jdbc.MySQLProfile.api._ val enableJdbcStreaming: (java.sql.Statement) => Unit = {statement => if (statement.isWrapperFor(classOf[com.mysql.cj.jdbc.StatementImpl])) { stateme

我使用Slick 3和Akka Streams从mysql传输数据

这就是我构建源代码的方式

import slick.jdbc.MySQLProfile.api._
val enableJdbcStreaming: (java.sql.Statement) => Unit = {statement =>
    if (statement.isWrapperFor(classOf[com.mysql.cj.jdbc.StatementImpl])) {
       statement.unwrap(classOf[com.mysql.cj.jdbc.StatementImpl]).enableStreamingResults()
    }
  }
val query = Tables.Foo.filter(r => r.isActive === true)
     .map(r => r.id).result.withStatementParameters(statementInit = enableJdbcStreaming)
Source.fromPublisher(db.stream(query))
我的应用程序运行了大约20分钟,然后由于以下错误而关闭

[error] Exception in thread "abhipool network timeout executor" java.lang.NullPointerException
[info] 15:31:46 INFO  [HikariPool] - abhipool - Close initiated...
[error]     at com.mysql.cj.mysqla.io.MysqlaProtocol.setSocketTimeout(MysqlaProtocol.java:1397)
[error]     at com.mysql.cj.mysqla.MysqlaSession$1.run(MysqlaSession.java:401)
[error]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
[error]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
[error]     at java.lang.Thread.run(Thread.java:745)
我有一种感觉,因为我的查询运行了很长一段时间,所以出现了某种超时,这导致了关闭

我的关系

mysql {
  profile = "slick.jdbc.MySQLProfile$"
  dataSourceClass = "slick.jdbc.DatabaseUrlDataSource"
  properties {
    driver = "com.mysql.cj.jdbc.Driver"
    url  = "jdbc:mysql://foo:3306/bar?useLegacyDatetimeCode=false&serverTimezone=America/Chicago"
    user = "foo"
    password = "bar"
  }
  connectionTimeout = 0
  idleTimeout = 0
  maxLifetime = 0
  maxConnections = 40
  minConnections = 10
  poolName = "abhipool"
  numThreads = 10
}
依赖关系

"com.typesafe.slick" %% "slick" % "3.2.1",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.1",
"mysql" % "mysql-connector-java" % "6.0.6",
如何配置我的应用程序数据库连接,以便即使我的流式应用程序连续几天传输数据。。。它一直在运行


关于同一个问题有一个非常长的对话,但它没有告诉我如何真正解决这个问题。这个问题使得编写使用Mysql作为源的长时间运行的流媒体任务完全不可能。

您可以通过在URL中添加参数来配置Mysql驱动程序

url  = "jdbc:mysql://foo:3306/bar?useLegacyDatetimeCode=false&serverTimezone=America/Chicago&socketTimeout=30000"

我把30000作为示例,把适合您需要的正确值放入30000之后会发生什么?我的作业将运行数天。然后更改该值,使其为一周,或者我是否遗漏了某些内容?