Различные базы данных разработки / производства в скалаке

ScalaQuery требует (AFAIK) использовать импорт вашего поставщика в вашем коде, например:

import org.scalaquery.ql.extended.H2Driver.Implicit._

Мы пытаемся использовать H2 в режиме разработки и MySQL в производстве. Есть ли способ добиться этого?

2 ответа

Мой подход был:

class Subscribers(database: Database)(profile: ExtendedProfile) {
    import profile.Implicit._
}

Где подписчики в основном мой объект доступа к данным. Не уверен, что это лучший подход. Это решило мой случай.

Вы бы создали такой DAO, как:

... в производственном коде:

new Subscribers(database)(MySQLDriver)

... и в тестовом коде:

new Subscribers(database)(H2Driver)

Я использую следующее в playframework

object test {
  lazy val extendedProfile = {
    val extendedProfileName = Play.configuration getString "db.default.extendedProfile" get
    companionObjectNamed(extendedProfileName).asInstanceOf[ExtendedProfile]
  }

  def companionObjectNamed(name: String) : AnyRef = {
    val c = Class forName (name + "$")
    c.getField("MODULE$") get c
  }
}

А затем импортировать

import util.extendedProfile.Implicit._

org.scalaquery.ql.extended.MySQLDriver это строка, которую я использовал в конфигурации, чтобы заставить работать MySQL.

Другие вопросы по тегам