Experimental support for MySQL is available!

This commit is contained in:
Naoki Takezoe
2016-04-12 11:16:01 +09:00
parent d50c858a26
commit 9eff8f248b
6 changed files with 52 additions and 22 deletions

View File

@@ -1,5 +1,4 @@
db { db {
driver = "org.h2.Driver"
url = "jdbc:h2:${DatabaseHome};MVCC=true" url = "jdbc:h2:${DatabaseHome};MVCC=true"
user = "sa" user = "sa"
password = "sa" password = "sa"

View File

@@ -0,0 +1,5 @@
db {
url = "jdbc:mysql://192.168.99.100/gitbucket"
user = "root"
password = "root"
}

View File

@@ -2,7 +2,6 @@ package gitbucket.core.model
import gitbucket.core.util.DatabaseConfig import gitbucket.core.util.DatabaseConfig
trait Profile { trait Profile {
val profile: slick.driver.JdbcProfile val profile: slick.driver.JdbcProfile
import profile.simple._ import profile.simple._
@@ -31,15 +30,7 @@ trait Profile {
trait ProfileProvider { self: Profile => trait ProfileProvider { self: Profile =>
private lazy val url = DatabaseConfig.url lazy val profile = DatabaseConfig.slickDriver
lazy val profile = if(url.indexOf("h2") >= 0){
slick.driver.H2Driver
} else if(url.indexOf("mysql") >= 0) {
slick.driver.MySQLDriver
} else {
throw new ExceptionInInitializerError(s"${url} is not unsupported.")
}
} }

View File

@@ -7,11 +7,11 @@ import com.typesafe.config.ConfigFactory
import gitbucket.core.GitBucketCoreModule import gitbucket.core.GitBucketCoreModule
import gitbucket.core.plugin.PluginRegistry import gitbucket.core.plugin.PluginRegistry
import gitbucket.core.service.{ActivityService, SystemSettingsService} import gitbucket.core.service.{ActivityService, SystemSettingsService}
import gitbucket.core.util.DatabaseConfig
import gitbucket.core.util.Directory._ import gitbucket.core.util.Directory._
import gitbucket.core.util.JDBCUtil._ import gitbucket.core.util.JDBCUtil._
import io.github.gitbucket.solidbase.Solidbase import io.github.gitbucket.solidbase.Solidbase
import io.github.gitbucket.solidbase.manager.JDBCVersionManager import io.github.gitbucket.solidbase.manager.JDBCVersionManager
import liquibase.database.core.H2Database
import javax.servlet.{ServletContextListener, ServletContextEvent} import javax.servlet.{ServletContextListener, ServletContextEvent}
import org.apache.commons.io.FileUtils import org.apache.commons.io.FileUtils
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@@ -41,7 +41,7 @@ class InitializeListener extends ServletContextListener with SystemSettingsServi
if(versionFile.exists()){ if(versionFile.exists()){
val version = FileUtils.readFileToString(versionFile, "UTF-8") val version = FileUtils.readFileToString(versionFile, "UTF-8")
if(version == "3.11"){ if(version == "3.13"){
// Initialization for GitBucket 3.10 // Initialization for GitBucket 3.10
logger.info("Migration to GitBucket 4.x start") logger.info("Migration to GitBucket 4.x start")
@@ -62,14 +62,14 @@ class InitializeListener extends ServletContextListener with SystemSettingsServi
logger.info("Migration to GitBucket 4.x completed") logger.info("Migration to GitBucket 4.x completed")
} else { } else {
throw new Exception("GitBucket can't migrate from this version. Please update to 3.11 at first.") throw new Exception("GitBucket can't migrate from this version. Please update to 3.13 at first.")
} }
} }
// Run normal migration // Run normal migration
logger.info("Start schema update") logger.info("Start schema update")
val solidbase = new Solidbase() val solidbase = new Solidbase()
solidbase.migrate(conn, Thread.currentThread.getContextClassLoader, new H2Database(), GitBucketCoreModule) solidbase.migrate(conn, Thread.currentThread.getContextClassLoader, DatabaseConfig.liquiDriver, GitBucketCoreModule)
// Load plugins // Load plugins
logger.info("Initialize plugins") logger.info("Initialize plugins")

View File

@@ -48,7 +48,7 @@ object Database {
private val dataSource: HikariDataSource = { private val dataSource: HikariDataSource = {
val config = new HikariConfig() val config = new HikariConfig()
config.setDriverClassName(DatabaseConfig.driver) config.setDriverClassName(DatabaseConfig.jdbcDriver)
config.setJdbcUrl(DatabaseConfig.url) config.setJdbcUrl(DatabaseConfig.url)
config.setUsername(DatabaseConfig.user) config.setUsername(DatabaseConfig.user)
config.setPassword(DatabaseConfig.password) config.setPassword(DatabaseConfig.password)

View File

@@ -2,18 +2,53 @@ package gitbucket.core.util
import com.typesafe.config.ConfigFactory import com.typesafe.config.ConfigFactory
import Directory.DatabaseHome import Directory.DatabaseHome
import liquibase.database.AbstractJdbcDatabase
import liquibase.database.core.{MySQLDatabase, H2Database}
object DatabaseConfig { object DatabaseConfig {
private val config = ConfigFactory.load("database") private lazy val config = ConfigFactory.load("database")
private val dbUrl = config.getString("db.url") private lazy val dbUrl = config.getString("db.url")
def url(directory: Option[String]): String = def url(directory: Option[String]): String =
dbUrl.replace("${DatabaseHome}", directory.getOrElse(DatabaseHome)) dbUrl.replace("${DatabaseHome}", directory.getOrElse(DatabaseHome))
val url: String = url(None) lazy val url: String = url(None)
val user: String = config.getString("db.user") lazy val user: String = config.getString("db.user")
val password: String = config.getString("db.password") lazy val password: String = config.getString("db.password")
val driver: String = config.getString("db.driver") lazy val jdbcDriver: String = DatabaseType(url).jdbcDriver
lazy val slickDriver: slick.driver.JdbcProfile = DatabaseType(url).slickDriver
lazy val liquiDriver: AbstractJdbcDatabase = DatabaseType(url).liquiDriver
} }
sealed trait DatabaseType {
val jdbcDriver: String
val slickDriver: slick.driver.JdbcProfile
val liquiDriver: AbstractJdbcDatabase
}
object DatabaseType {
def apply(url: String): DatabaseType = {
if(url.indexOf("h2") >= 0){
H2
} else if(url.indexOf("mysql") >= 0){
MySQL
} else {
throw new IllegalArgumentException(s"${url} is not supported.")
}
}
object H2 extends DatabaseType {
val jdbcDriver = "org.h2.Driver"
val slickDriver = slick.driver.H2Driver
val liquiDriver = new H2Database()
}
object MySQL extends DatabaseType {
val jdbcDriver = "com.mysql.jdbc.Driver"
val slickDriver = slick.driver.MySQLDriver
val liquiDriver = new MySQLDatabase()
}
}