From 2c7eac556a08e7fe7aa1a9b48e330097c445a04b Mon Sep 17 00:00:00 2001 From: Gregor Heine Date: Fri, 12 May 2023 13:27:37 +0100 Subject: [PATCH] Support setting of hikari keepaliveTime --- persistence/play-jdbc/src/main/resources/reference.conf | 3 +++ .../src/main/scala/play/api/db/HikariCPModule.scala | 1 + .../src/test/scala/play/api/db/HikariCPConfigSpec.scala | 9 +++++++++ 3 files changed, 13 insertions(+) diff --git a/persistence/play-jdbc/src/main/resources/reference.conf b/persistence/play-jdbc/src/main/resources/reference.conf index cc2dbdee115..925ff237efb 100644 --- a/persistence/play-jdbc/src/main/resources/reference.conf +++ b/persistence/play-jdbc/src/main/resources/reference.conf @@ -72,6 +72,9 @@ play { # The idle timeout idleTimeout = 10 minutes + # If non null, controls how frequently HikariCP will attempt to keep a connection alive + keepaliveTime = null + # The max lifetime of a connection maxLifetime = 30 minutes diff --git a/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala b/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala index 9ea3f37123c..1703d92fb69 100644 --- a/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala +++ b/persistence/play-jdbc/src/main/scala/play/api/db/HikariCPModule.scala @@ -128,6 +128,7 @@ private[db] class HikariCPConfig private ( hikariConfig.setAutoCommit(config.get[Boolean]("autoCommit")) hikariConfig.setConnectionTimeout(toMillis(config.get[Duration]("connectionTimeout"))) hikariConfig.setIdleTimeout(toMillis(config.get[Duration]("idleTimeout"))) + config.get[Option[Duration]]("keepaliveTime").foreach(duration => hikariConfig.setKeepaliveTime(toMillis(duration))) hikariConfig.setMaxLifetime(toMillis(config.get[Duration]("maxLifetime"))) config.get[Option[String]]("connectionTestQuery").foreach(hikariConfig.setConnectionTestQuery) config.get[Option[Int]]("minimumIdle").foreach(hikariConfig.setMinimumIdle) diff --git a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala index e73a2a4abb3..eb02d762696 100644 --- a/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala +++ b/persistence/play-jdbc/src/test/scala/play/api/db/HikariCPConfigSpec.scala @@ -59,6 +59,10 @@ class HikariCPConfigSpec extends Specification { new HikariCPConfig("foo", dbConfig, reference).toHikariConfig.getIdleTimeout must beEqualTo(10.minutes.toMillis) } + "keepaliveTime to 0" in new Configs { + new HikariCPConfig("foo", dbConfig, reference).toHikariConfig.getKeepaliveTime must beEqualTo(0L) + } + "maxLifetime to 30 minutes" in new Configs { new HikariCPConfig("foo", dbConfig, reference).toHikariConfig.getMaxLifetime must beEqualTo(30.minutes.toMillis) } @@ -126,6 +130,11 @@ class HikariCPConfigSpec extends Specification { new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getIdleTimeout must beEqualTo(5.minutes.toMillis) } + "keepaliveTime" in new Configs { + val config = from("hikaricp.keepaliveTime" -> "5 minutes") + new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getKeepaliveTime must beEqualTo(5.minutes.toMillis) + } + "maxLifetime" in new Configs { val config = from("hikaricp.maxLifetime" -> "15 minutes") new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getMaxLifetime must beEqualTo(15.minutes.toMillis)