避免在 Play 中打开未使用的数据库连接

Posted

技术标签:

【中文标题】避免在 Play 中打开未使用的数据库连接【英文标题】:Avoid opening unused database connections in Play 【发布时间】:2015-05-27 22:28:43 【问题描述】:

我有一个 Play 应用程序,它在 conf/reference.conf 中定义了三种不同的连接配置。当我运行需要使用FakeApplication 的单元测试时,即使单元测试不调用任何使用任何数据库连接的类,BoneCP 插件也会自动初始化这三个连接。它为每个单元测试启动和关闭连接。这会导致单元测试需要很长时间才能完成。有没有办法在 BoneCP、HikariCP 或其他一些连接管理器中懒惰地启动数据库连接,只在第一次使用时才打开它们?

我当然可以在相关单元测试中完全禁用 BoneCPPlugin,但是如果我有一个需要其中一种连接配置的单元测试呢?

【问题讨论】:

如果它需要一个数据库连接,它是真的单元测试吗? 你说得对,它是集成测试,而不是单元测试。但是,它们现在被作为单元测试调用,所以我正在寻找一个解决方案,直到我们有机会将它们移到单独的集成测试套件中。 另外,即使我们将这些作为适当的集成测试分开,我们仍然会遇到同样的性能问题。 您可以查看acolyte.eu.org 进行持久性(不是数据库)单元测试。 【参考方案1】:

对于 HikariCP,只需设置 initializationFailFast=falseminimumIdle=0

【讨论】:

我尝试在db.<pool_name> 部分中添加play.db.prototype.hikaricp.initializationFailFast=falseplay.db.prototype.hikaricp.minimumIdle=0application.conf 以及initializationFailFast = falseminimumIdle = 0reference.conf,尽管它似乎加快了速度,它仍在与数据库进行不必要的连接。运行单元测试时,我看到很多“为数据源 创建池”消息。 如果您收到的消息是“为数据源 创建池”,那么这是来自 Play 的消息。我建议在 Play Google Group 上提问。

以上是关于避免在 Play 中打开未使用的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

R-无需打开文本编辑器即可连接到文本文件

连接到 Play 应用程序中嵌入的 HSQLDB 数据库

arcgis未连接

为啥我的google play一直显示网络连接失败?

Play Framework 无法连接到 WS

星途凌云400tcar play链接后下次还要连吗