Вам нужно будет абстрагировать профиль Slick с помощью JdbcProfile
. Это избавит от частей Oracle -specifi c, которые вы определили как проблему.
Похоже, у вас достаточно большое приложение. В этом случае обычно (по моему опыту) сделать профиль Slick параметром для класса или признака, а затем передать указанный профиль c, когда вы знаете, что это такое.
Например (используя пример кода в Essential Slick ) мы можем сказать, что наш профиль приложения должен иметь JdbcProfile
:
import slick.jdbc.JdbcProfile
trait Profile {
val profile: JdbcProfile
}
Тогда для каждого модуль кода базы данных, мы импортируем профиль API:
trait DatabaseModule1 { self: Profile =>
import profile.api._
// Write database code here
}
Обратите внимание, как абстрактный profile.api._
импорт заменяет спецификацию базы данных c slick.jdbc.OracleProfile.api._
Если у вас много модулей Вы можете объединить их все вместе в класс кейсов:
class DatabaseLayer(val profile: JdbcProfile) extends
Profile with
DatabaseModule1 with
DatabaseModule2
И, наконец, на краю своей программы вы можете решить, какую конфигурацию использовать:
object Main extends App {
// At this point, you can make a test and decide which specific
// database you want to use. Here I'm saying it's always H2:
val databaseLayer = new DatabaseLayer(slick.jdbc.H2Profile)
// You can now use methods in `databaseLayer`,
// or pass it to other modules in your system
}
Это описано далее в: