mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-08 22:45:51 +01:00
Merge pull request #605 from rlazoti/add-connection-pool
Add Connection Pool
This commit is contained in:
@@ -10,7 +10,7 @@ import util.Directory._
|
||||
import util.ControlUtil._
|
||||
import util.JDBCUtil._
|
||||
import org.eclipse.jgit.api.Git
|
||||
import util.Directory
|
||||
import util.{DatabaseConfig, Directory}
|
||||
|
||||
object AutoUpdate {
|
||||
|
||||
@@ -208,10 +208,7 @@ class AutoUpdateListener extends ServletContextListener {
|
||||
}
|
||||
org.h2.Driver.load()
|
||||
|
||||
val context = event.getServletContext
|
||||
context.setInitParameter("db.url", s"jdbc:h2:${DatabaseHome};MVCC=true")
|
||||
|
||||
defining(getConnection(event.getServletContext)){ conn =>
|
||||
defining(getConnection()){ conn =>
|
||||
logger.debug("Start schema update")
|
||||
try {
|
||||
defining(getCurrentVersion()){ currentVersion =>
|
||||
@@ -239,16 +236,10 @@ class AutoUpdateListener extends ServletContextListener {
|
||||
def contextDestroyed(sce: ServletContextEvent): Unit = {
|
||||
}
|
||||
|
||||
private def getConnection(servletContext: ServletContext): Connection =
|
||||
private def getConnection(): Connection =
|
||||
DriverManager.getConnection(
|
||||
servletContext.getInitParameter("db.url"),
|
||||
servletContext.getInitParameter("db.user"),
|
||||
servletContext.getInitParameter("db.password"))
|
||||
|
||||
private def getDatabase(servletContext: ServletContext): scala.slick.jdbc.JdbcBackend.Database =
|
||||
slick.jdbc.JdbcBackend.Database.forURL(
|
||||
servletContext.getInitParameter("db.url"),
|
||||
servletContext.getInitParameter("db.user"),
|
||||
servletContext.getInitParameter("db.password"))
|
||||
DatabaseConfig.url,
|
||||
DatabaseConfig.user,
|
||||
DatabaseConfig.password)
|
||||
|
||||
}
|
||||
|
||||
@@ -1,27 +1,29 @@
|
||||
package servlet
|
||||
|
||||
import javax.servlet._
|
||||
import org.slf4j.LoggerFactory
|
||||
import javax.servlet.http.HttpServletRequest
|
||||
import util.Keys
|
||||
import com.mchange.v2.c3p0.ComboPooledDataSource
|
||||
import org.slf4j.LoggerFactory
|
||||
import slick.jdbc.JdbcBackend.{Database => SlickDatabase, Session}
|
||||
import util.{DatabaseConfig, Keys}
|
||||
|
||||
/**
|
||||
* Controls the transaction with the open session in view pattern.
|
||||
*/
|
||||
class TransactionFilter extends Filter {
|
||||
|
||||
|
||||
private val logger = LoggerFactory.getLogger(classOf[TransactionFilter])
|
||||
|
||||
|
||||
def init(config: FilterConfig) = {}
|
||||
|
||||
|
||||
def destroy(): Unit = {}
|
||||
|
||||
|
||||
def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain): Unit = {
|
||||
if(req.asInstanceOf[HttpServletRequest].getRequestURI().startsWith("/assets/")){
|
||||
// assets don't need transaction
|
||||
chain.doFilter(req, res)
|
||||
} else {
|
||||
Database(req.getServletContext) withTransaction { session =>
|
||||
Database() withTransaction { session =>
|
||||
logger.debug("begin transaction")
|
||||
req.setAttribute(Keys.Request.DBSession, session)
|
||||
chain.doFilter(req, res)
|
||||
@@ -34,12 +36,24 @@ class TransactionFilter extends Filter {
|
||||
|
||||
object Database {
|
||||
|
||||
def apply(context: ServletContext): slick.jdbc.JdbcBackend.Database =
|
||||
slick.jdbc.JdbcBackend.Database.forURL(context.getInitParameter("db.url"),
|
||||
context.getInitParameter("db.user"),
|
||||
context.getInitParameter("db.password"))
|
||||
private val logger = LoggerFactory.getLogger(Database.getClass)
|
||||
|
||||
def getSession(req: ServletRequest): slick.jdbc.JdbcBackend#Session =
|
||||
req.getAttribute(Keys.Request.DBSession).asInstanceOf[slick.jdbc.JdbcBackend#Session]
|
||||
private val db: SlickDatabase = {
|
||||
val datasource = new ComboPooledDataSource
|
||||
|
||||
datasource.setDriverClass(DatabaseConfig.driver)
|
||||
datasource.setJdbcUrl(DatabaseConfig.url)
|
||||
datasource.setUser(DatabaseConfig.user)
|
||||
datasource.setPassword(DatabaseConfig.password)
|
||||
|
||||
logger.debug("load database connection pool")
|
||||
|
||||
SlickDatabase.forDataSource(datasource)
|
||||
}
|
||||
|
||||
def apply(): SlickDatabase = db
|
||||
|
||||
def getSession(req: ServletRequest): Session =
|
||||
req.getAttribute(Keys.Request.DBSession).asInstanceOf[Session]
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user