Je diffuse des données de mysql en utilisant Slick 3 et Akka Streams.Akka Streams Hikari Connexion Pool pour MySQL Streaming
Voici comment je construis ma source
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))
Mon application dure comme 20 minutes et puis arrête avec l'erreur suivante
[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)
J'ai le sentiment que parce que ma requête est en cours d'exécution pendant très longtemps, il se produit un certain délai d'attente qui déclenche cette fermeture.
Ma connexion
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
}
dépendances
"com.typesafe.slick" %% "slick" % "3.2.1",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.1",
"mysql" % "mysql-connector-java" % "6.0.6",
Comment puis-je configurer mes connexions de base de données d'application de sorte que même si mes ruisseaux applications de streaming des données pendant plusieurs jours ... il continue à courir.
Il ya une conversation extrêmement longue sur ce même problème here mais il ne me dit pas comment résoudre ce problème. Ce problème rend totalement impossible l'écriture de tâches de diffusion en continu qui utilisent Mysql comme source.
ce qui se passe après 30000? mon travail durera des jours. –
alors changez la valeur pour que ce soit une semaine, ou est-ce que je manque quelque chose? – n1r3