Если у кого-то есть лучшее предложение, пожалуйста, улучшите этот ответ! Я боролся в течение нескольких месяцев.
ого, чтобы база данных была доступной в масштабе с эволюцией, я использую это расширение по умолчаниюPlaySpec
вдохновленныйэтот ТАК вопрос:
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: источник данных отклонил установление соединения, сообщение от сервера: «Слишком много соединений»
Как видно из приведенного выше кода, я попытался добавить строку
databaseApi.database("default").shutdown()
вafterAll()
чтобы смягчить это, но это не имело никакого эффекта. Я пытался не запускать тесты параллельно, но и безрезультатно. Где я открываю соединения БД, не закрывая их, и куда мне звонитьshutdown()
?
Нотабене Я использую Play 2.5.10 и Slick 3.1.