设置Slick 3.xx以在不同的环境中使用不同的数据库

问题描述 投票:0回答:1

我一直在针对我们的Oracle数据库运行Slick。现在,我想在我们的集成测试中也将其用于H2。我以为这只是更改正在加载的驱动程序,但现在我意识到我的所有存储库都充满了import slick.jdbc.OracleProfile.api._,这使我认为此刻我的存储库已与OracleSQL绑定。

要使Slick支持基于不同的配置文件加载Oracle或H2驱动程序,标准过程是什么?

谢谢

database scala h2 slick
1个回答
0
投票

您需要通过JdbcProfile提取Slick配置文件。这将摆脱您已经确定为问题的特定于Oracle的部分。

听起来您的应用程序相当大。在这种情况下,通常(以我的经验)是将Slick配置文件作为类或特征的参数,然后在知道它是什么时传递特定的配置文件。

例如(使用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._导入如何替换特定于数据库的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
}

这将在以下进一步描述:

© www.soinside.com 2019 - 2024. All rights reserved.