播放 2.3.x:多项目,禁用 BoneCP

Play 2.3.x: Multiproject, disable BoneCP

我有一个包含一些子项目的 Play 项目。子项目之一需要 JDBC,所以 BoneCP(它访问了 MySQL 数据库)。

另一方面,根项目根本不需要 JDBC

我的问题是: JDBC 在子项目的 build.sbt 中声明。当我 运行 所有测试时,在本例中是根项目测试, BoneCP 被初始化,即使在子项目中只是需要。它在测试过程中给我带来了一些问题:

Configuration error[Cannot connect to database [default]]  (Configuration.scala:94)

我可以指定 Play 仅对子项目使用 JDBC 吗?或者我可以在根项目中禁用 JDBCBoneCP 吗?

感谢您的回答。

对于单元测试,我会说创建一个提供通用 FakeApplication 的测试实用程序对象。然后你可以在你的单元测试中重新使用这个 FakeApp。 FakeApplication 的构造函数参数之一是 withoutPlugins,您可以利用它在单元测试期间关闭插件。

例如,在当前的 Play 应用程序中,我们使用 ReactiveMongo,但不希望在单元测试中使用它。

object MockMyApp extends OurBaseSpec {
 val withoutPlugins = Seq(classOf[ReactiveMongoPlugin].getName)
 val appWithoutIntegrations = FakeApplication(withoutPlugins = withoutPlugins)
}

然后我们在创建用于单元测试的新应用程序时引用此 MockMyApp.appWithoutIntegrations。在创建 FakeApp 时,您还可以在其他选项中指定其他配置。

从几个链接中,我认为您可能正在寻找在创建 FakeApp 时要设置的其他配置:

    dbplugin=disabled

Answer where above configuration was reason dbplugin wasn't working

Instructions for configuring alternate connection pool look at step#2

   val disabledDbConfig = Map("dbplugin"->"disabled")
   val appWithoutIntegrations = FakeApplication(additionalConfiguration = disabledDbConfig)

终于搞定了!

val withoutPlugins = Seq(classOf[ReactiveMongoPlugin].getName) 非常适合禁用 ReactiveMongo 插件。

对于主要问题: additionalConfiguration = Map("dbplugin" -> "disabled", "evolutionplugin" -> "disabled")

在测试期间根本没有 JDBC。非常感谢巴里!