mieć baza danych dostępna w scalatest z ewolucji Używam tego rozszerzenia domyślnie PlaySpec
zainspirowany this SO question:zabaw testy z bazy danych: „Zbyt wiele połączeń”
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()
}
}
Dotyczy ewolucje bazy danych podczas uruchamiania pakiet, i przywraca je, gdy pakiet się kończy. Test wtedy wygląda
class ProjectsSpec extends ResetDbSpec with OneAppPerSuite { ...
Po dodaniu więcej testów tak, uderzę punkt, w którym pewne testy, które uda kiedy uruchomić je w spokoju, nie powiedzie się ten błąd:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"
Jak można zobaczyć w powyższym kodzie, próbowałem dodać linię
databaseApi.database("default").shutdown()
w afterAll()
złagodzić, ale to nie miało żadnego wpływu. Próbowałem nie uruchamiać testów równolegle, ale bez efektu. Gdzie jest to, że otwieram połączenia DB bez ich zamykania i gdzie powinienem zadzwonić pod numer shutdown()
?
N.B. Używam Play 2.5.10 i Slick 3.1.
Czy aplikacja próbuje zachować więcej połączeń w puli niż baza danych pozwoli na otwarcie? –
@MichaelZajac Jak mogę to sprawdzić? – JulienD
Czy zmiana "lazy val databaseApi' na" def databaseApi' pomaga? W przeciwnym razie możesz sprawdzić https://www.playframework.com/documentation/2.5.x/SettingsJDBC, aby dostosować maksymalny rozmiar puli. Podobnie jak w @MichaelZajac powiedział, można sprawdzić konfigurację lokalnej bazy danych, aby zobaczyć, ile połączeń pozwala. – Eric