diff --git a/src/main/scala/ScalatraBootstrap.scala b/src/main/scala/ScalatraBootstrap.scala index d61c102..7ba1d02 100644 --- a/src/main/scala/ScalatraBootstrap.scala +++ b/src/main/scala/ScalatraBootstrap.scala @@ -1,7 +1,7 @@ import gitbucket.core.controller._ import gitbucket.core.plugin.PluginRegistry -import gitbucket.core.servlet.{AccessTokenAuthenticationFilter, BasicAuthenticationFilter, TransactionFilter} +import gitbucket.core.servlet.{AccessTokenAuthenticationFilter, BasicAuthenticationFilter, Database, TransactionFilter} import gitbucket.core.util.Directory import java.util.EnumSet @@ -47,4 +47,8 @@ dir.mkdirs() } } + + override def destroy(context: ServletContext): Unit = { + Database.closeDataSource() + } } diff --git a/src/main/scala/gitbucket/core/servlet/InitializeListener.scala b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala index 2371170..51696ee 100644 --- a/src/main/scala/gitbucket/core/servlet/InitializeListener.scala +++ b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala @@ -14,7 +14,6 @@ import org.eclipse.jgit.api.Git import gitbucket.core.util.Versions import gitbucket.core.util.Directory -import gitbucket.core.plugin._ object AutoUpdate { @@ -182,7 +181,7 @@ } org.h2.Driver.load() - defining(getConnection()){ conn => + using(getConnection()){ conn => // Migration logger.debug("Start schema update") Versions.update(conn, headVersion, getCurrentVersion(), versions, Thread.currentThread.getContextClassLoader){ conn => @@ -195,9 +194,11 @@ } - def contextDestroyed(event: ServletContextEvent): Unit = { + override def contextDestroyed(event: ServletContextEvent): Unit = { // Shutdown plugins PluginRegistry.shutdown(event.getServletContext, loadSystemSettings()) + // Close datasource + Database.closeDataSource() } private def getConnection(): Connection = @@ -205,5 +206,4 @@ DatabaseConfig.url, DatabaseConfig.user, DatabaseConfig.password) - } diff --git a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala index 8b729d6..5840eb8 100644 --- a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala @@ -39,17 +39,18 @@ private val logger = LoggerFactory.getLogger(Database.getClass) - private val db: SlickDatabase = { - val datasource = new ComboPooledDataSource - - datasource.setDriverClass(DatabaseConfig.driver) - datasource.setJdbcUrl(DatabaseConfig.url) - datasource.setUser(DatabaseConfig.user) - datasource.setPassword(DatabaseConfig.password) - + private val dataSource: ComboPooledDataSource = { + val ds = new ComboPooledDataSource + ds.setDriverClass(DatabaseConfig.driver) + ds.setJdbcUrl(DatabaseConfig.url) + ds.setUser(DatabaseConfig.user) + ds.setPassword(DatabaseConfig.password) logger.debug("load database connection pool") + ds + } - SlickDatabase.forDataSource(datasource) + private val db: SlickDatabase = { + SlickDatabase.forDataSource(dataSource) } def apply(): SlickDatabase = db @@ -57,4 +58,6 @@ def getSession(req: ServletRequest): Session = req.getAttribute(Keys.Request.DBSession).asInstanceOf[Session] + def closeDataSource(): Unit = dataSource.close + }