diff --git a/persistence/play-jdbc/src/main/resources/reference.conf b/persistence/play-jdbc/src/main/resources/reference.conf index 6c3d8e06ef3..cc2dbdee115 100644 --- a/persistence/play-jdbc/src/main/resources/reference.conf +++ b/persistence/play-jdbc/src/main/resources/reference.conf @@ -123,6 +123,9 @@ play { # If non null, sets the transaction isolation level transactionIsolation = null + # The user-supplied SQLExceptionOverride class name. + exceptionOverrideClassName = null + # The validation timeout to use validationTimeout = 5 seconds 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 e7b35a55fc4..2f70d17c9db 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 @@ -146,6 +146,7 @@ private[db] class HikariCPConfig private ( config.get[Option[String]]("connectionInitSql").foreach(hikariConfig.setConnectionInitSql) config.get[Option[String]]("catalog").foreach(hikariConfig.setCatalog) config.get[Option[String]]("transactionIsolation").foreach(hikariConfig.setTransactionIsolation) + config.get[Option[String]]("exceptionOverrideClassName").foreach(hikariConfig.setExceptionOverrideClassName) hikariConfig.setValidationTimeout(config.get[FiniteDuration]("validationTimeout").toMillis) hikariConfig.setLeakDetectionThreshold(toMillis(config.get[Duration]("leakDetectionThreshold"))) 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 359abcc8caf..96c8780bb6d 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 @@ -177,10 +177,21 @@ class HikariCPConfigSpec extends Specification { val config = from("hikaricp.leakDetectionThreshold" -> "3 seconds") new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getLeakDetectionThreshold must beEqualTo(3000L) } + + "exceptionOverrideClassName" in new Configs { + val className = classOf[MyTestExceptionOverride].getName + + val config = from("hikaricp.exceptionOverrideClassName" -> className) + new HikariCPConfig("foo", dbConfig, config).toHikariConfig.getExceptionOverrideClassName must beEqualTo( + className + ) + } } } } +class MyTestExceptionOverride extends com.zaxxer.hikari.SQLExceptionOverride {} + trait Configs extends Scope { val dbConfig: DatabaseConfig = DatabaseConfig(Some("org.h2.Driver"), Some("jdbc:h2:mem:"), None, None, None) val reference: Configuration = Configuration.reference.get[Configuration]("play.db.prototype")