database - 设置 Slick 3.xx 以在不同环境中使用不同的数据库
问题描述
我已经对我们的 Oracle 数据库运行 Slick 有一段时间了。现在我还想在我们的集成测试中将它用于 H2。我以为这只是关于更改正在加载的驱动程序,但现在我意识到我所有的存储库都充满了import slick.jdbc.OracleProfile.api._
,这让我认为我的存储库此时与 OracleSQL 相关联。
让 Slick 支持基于不同配置文件加载 Oracle 或 H2 驱动程序的标准过程是什么?
解决方案
您需要通过 抽象 Slick 配置文件JdbcProfile
。这将消除您确定为问题的特定于 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
}
这在以下中有进一步描述:
Slick Manual 中的DbConfig 和 Multi DB 模式,其中还描述了用于选择您在其中定义的不同配置的有用技巧
application.conf
。
推荐阅读
- amazon-web-services - 查找具有特定实例的所有 aws 负载均衡器
- python - 从 CMD 运行 Python 脚本时出现“Urlopen 错误未知 url 类型”
- php - PHP & Symfony 3:在表单上按下提交后电子邮件不发送,但使用 'php bin\console swiftmailer:email:send' 成功发送
- php - 用php创建动态页面
- css - 是否有包含输入的输入字段的 CSS 选择器?
- python - Pandas 从列中获取一个热编码作为布尔值
- apache-kafka - Kafka Streams:关闭时通知流线程/任务
- eclipse - eclipse 中缺少的路径和符号(4.12、C++、Arduino)
- reactjs - Eslint 错误:多行 JSX react/jsx-wrap-multilines 周围缺少括号
- docker - 如何在命令行中限制 Docker Engine 可用的资源?