diff --git a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala index bad06e1..c25a2fe 100644 --- a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala @@ -52,6 +52,13 @@ config.setJdbcUrl(DatabaseConfig.url) config.setUsername(DatabaseConfig.user) config.setPassword(DatabaseConfig.password) + config.setAutoCommit(false) + DatabaseConfig.connectionTimeout.foreach(config.setConnectionTimeout) + DatabaseConfig.idleTimeout.foreach(config.setIdleTimeout) + DatabaseConfig.maxLifetime.foreach(config.setMaxLifetime) + DatabaseConfig.minimumIdle.foreach(config.setMinimumIdle) + DatabaseConfig.maximumPoolSize.foreach(config.setMaximumPoolSize) + logger.debug("load database connection pool") new HikariDataSource(config) } diff --git a/src/main/scala/gitbucket/core/util/DatabaseConfig.scala b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala index ec68d0b..98892b7 100644 --- a/src/main/scala/gitbucket/core/util/DatabaseConfig.scala +++ b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala @@ -17,6 +17,11 @@ | url = "jdbc:h2:${DatabaseHome};MVCC=true" | user = "sa" | password = "sa" + |# connectionTimeout = 30000 + |# idleTimeout = 600000 + |# maxLifetime = 1800000 + |# minimumIdle = 10 + |# maximumPoolSize = 10 |} |""".stripMargin, "UTF-8") } @@ -28,12 +33,21 @@ def url(directory: Option[String]): String = dbUrl.replace("${DatabaseHome}", directory.getOrElse(DatabaseHome)) - lazy val url: String = url(None) - lazy val user: String = config.getString("db.user") - lazy val password: String = config.getString("db.password") - lazy val jdbcDriver: String = DatabaseType(url).jdbcDriver - lazy val slickDriver: slick.driver.JdbcProfile = DatabaseType(url).slickDriver - lazy val liquiDriver: AbstractJdbcDatabase = DatabaseType(url).liquiDriver + lazy val url : String = url(None) + lazy val user : String = config.getString("db.user") + lazy val password : String = config.getString("db.password") + lazy val jdbcDriver : String = DatabaseType(url).jdbcDriver + lazy val slickDriver : slick.driver.JdbcProfile = DatabaseType(url).slickDriver + lazy val liquiDriver : AbstractJdbcDatabase = DatabaseType(url).liquiDriver + lazy val connectionTimeout : Option[Long] = getOptionValue("db.connectionTimeout", config.getLong) + lazy val idleTimeout : Option[Long] = getOptionValue("db.idleTimeout" , config.getLong) + lazy val maxLifetime : Option[Long] = getOptionValue("db.maxLifetime" , config.getLong) + lazy val minimumIdle : Option[Int] = getOptionValue("db.minimumIdle" , config.getInt) + lazy val maximumPoolSize : Option[Int] = getOptionValue("db.maximumPoolSize" , config.getInt) + + private def getOptionValue[T](path: String, f: String => T): Option[T] = { + if(config.hasPath(path)) None else Some(f(path)) + } }