diff --git a/src/main/resources/database.conf b/src/main/resources/database.conf index 0eca733..9ce0c89 100644 --- a/src/main/resources/database.conf +++ b/src/main/resources/database.conf @@ -1,5 +1,4 @@ db { - driver = "org.h2.Driver" url = "jdbc:h2:${DatabaseHome};MVCC=true" user = "sa" password = "sa" diff --git a/src/main/resources/database_mysql.conf b/src/main/resources/database_mysql.conf new file mode 100644 index 0000000..59bafeb --- /dev/null +++ b/src/main/resources/database_mysql.conf @@ -0,0 +1,5 @@ +db { + url = "jdbc:mysql://192.168.99.100/gitbucket" + user = "root" + password = "root" +} diff --git a/src/main/scala/gitbucket/core/model/Profile.scala b/src/main/scala/gitbucket/core/model/Profile.scala index 189e0a6..26bb225 100644 --- a/src/main/scala/gitbucket/core/model/Profile.scala +++ b/src/main/scala/gitbucket/core/model/Profile.scala @@ -2,7 +2,6 @@ import gitbucket.core.util.DatabaseConfig - trait Profile { val profile: slick.driver.JdbcProfile import profile.simple._ @@ -31,15 +30,7 @@ trait ProfileProvider { self: Profile => - private lazy val url = DatabaseConfig.url - - 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.") - } + lazy val profile = DatabaseConfig.slickDriver } diff --git a/src/main/scala/gitbucket/core/servlet/InitializeListener.scala b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala index 61c7567..7fdc328 100644 --- a/src/main/scala/gitbucket/core/servlet/InitializeListener.scala +++ b/src/main/scala/gitbucket/core/servlet/InitializeListener.scala @@ -7,11 +7,11 @@ import gitbucket.core.GitBucketCoreModule import gitbucket.core.plugin.PluginRegistry import gitbucket.core.service.{ActivityService, SystemSettingsService} +import gitbucket.core.util.DatabaseConfig import gitbucket.core.util.Directory._ import gitbucket.core.util.JDBCUtil._ import io.github.gitbucket.solidbase.Solidbase import io.github.gitbucket.solidbase.manager.JDBCVersionManager -import liquibase.database.core.H2Database import javax.servlet.{ServletContextListener, ServletContextEvent} import org.apache.commons.io.FileUtils import org.slf4j.LoggerFactory @@ -41,7 +41,7 @@ if(versionFile.exists()){ val version = FileUtils.readFileToString(versionFile, "UTF-8") - if(version == "3.11"){ + if(version == "3.13"){ // Initialization for GitBucket 3.10 logger.info("Migration to GitBucket 4.x start") @@ -62,14 +62,14 @@ logger.info("Migration to GitBucket 4.x completed") } 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 logger.info("Start schema update") val solidbase = new Solidbase() - solidbase.migrate(conn, Thread.currentThread.getContextClassLoader, new H2Database(), GitBucketCoreModule) + solidbase.migrate(conn, Thread.currentThread.getContextClassLoader, DatabaseConfig.liquiDriver, GitBucketCoreModule) // Load plugins logger.info("Initialize plugins") diff --git a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala index e61cc10..bad06e1 100644 --- a/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala +++ b/src/main/scala/gitbucket/core/servlet/TransactionFilter.scala @@ -48,7 +48,7 @@ private val dataSource: HikariDataSource = { val config = new HikariConfig() - config.setDriverClassName(DatabaseConfig.driver) + config.setDriverClassName(DatabaseConfig.jdbcDriver) config.setJdbcUrl(DatabaseConfig.url) config.setUsername(DatabaseConfig.user) config.setPassword(DatabaseConfig.password) diff --git a/src/main/scala/gitbucket/core/util/DatabaseConfig.scala b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala index ffe7cee..9ab374d 100644 --- a/src/main/scala/gitbucket/core/util/DatabaseConfig.scala +++ b/src/main/scala/gitbucket/core/util/DatabaseConfig.scala @@ -2,18 +2,53 @@ import com.typesafe.config.ConfigFactory import Directory.DatabaseHome +import liquibase.database.AbstractJdbcDatabase +import liquibase.database.core.{MySQLDatabase, H2Database} object DatabaseConfig { - private val config = ConfigFactory.load("database") - private val dbUrl = config.getString("db.url") + private lazy val config = ConfigFactory.load("database") + private lazy val dbUrl = config.getString("db.url") def url(directory: Option[String]): String = dbUrl.replace("${DatabaseHome}", directory.getOrElse(DatabaseHome)) - val url: String = url(None) - val user: String = config.getString("db.user") - val password: String = config.getString("db.password") - val driver: String = config.getString("db.driver") + 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 } + +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() + } +}