避免在 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=false
和 minimumIdle=0
。
【讨论】:
我尝试在db.<pool_name>
部分中添加play.db.prototype.hikaricp.initializationFailFast=false
和play.db.prototype.hikaricp.minimumIdle=0
到application.conf
以及initializationFailFast = false
和minimumIdle = 0
到reference.conf
,尽管它似乎加快了速度,它仍在与数据库进行不必要的连接。运行单元测试时,我看到很多“为数据源 以上是关于避免在 Play 中打开未使用的数据库连接的主要内容,如果未能解决你的问题,请参考以下文章