Чтобы иметь базу данных, доступные в scalatest с эволюциями я использую это расширение по умолчанию PlaySpec
вдохновленного this SO question:Play тестов с базой данных: «Слишком много соединений»
trait ResetDbSpec extends PlaySpec with BeforeAndAfterAll {
lazy val appBuilder = new GuiceApplicationBuilder()
lazy val injector = appBuilder.injector()
lazy val databaseApi = injector.instanceOf[DBApi]
override def beforeAll() = {
Evolutions.applyEvolutions(databaseApi.database("default"))
}
override def afterAll() = {
Evolutions.cleanupEvolutions(databaseApi.database("default"))
databaseApi.database("default").shutdown()
}
}
Это относится эволюции к базе данных при запуске свита, и возвращает их, когда пакет заканчивается. Тест затем выглядит
class ProjectsSpec extends ResetDbSpec with OneAppPerSuite { ...
После добавления дополнительных испытаний, как это, я попал момент, когда некоторые тесты, которые добились успеха, когда я запускаю их в покое, потерпеть неудачу с этой ошибкой:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
Как можно увидеть в приведенном выше коде, я попытался добавить строку
databaseApi.database("default").shutdown()
в afterAll()
, чтобы смягчить, но это не имело никакого эффекта. Я попытался не запускать тесты параллельно, но и никакого эффекта. Где я могу открыть db-соединения, не закрывая их, и где я должен позвонить shutdown()
?
N.B. Я использую Play 2.5.10 и Slick 3.1.
Является ли приложение попыткой сохранить больше соединений в пуле, чем база данных позволит открыть? –
@MichaelZajac Как я могу проверить это? – JulienD
Помогает ли изменение 'lazy val databaseApi'' def databaseApi'? В противном случае вы можете проверить https://www.playframework.com/documentation/2.5.x/SettingsJDBC, чтобы настроить максимальный размер пула. Кроме того, как сказал @MichaelZajac, вы можете проверить свою локальную конфигурацию базы данных, чтобы узнать, сколько подключений она позволяет. – Eric