Wpis z mikrobloga

W trakcie odpalania kilkudziesięciu springowych integracyjnych testów z Testcontainers, po 10 testach dostaję taki błąd:

org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection [HikariPool-1 - Connection is not available, request timed out after 30003ms.] [n/a]
Szczegóły na 4programmers: https://4programmers.net/Forum/Java/370632-problem_z_testcontainers_przy_wielu_testach?p=1936802#id1936802
#java #spring #naukaprogramowania #programowanie #programista15k
  • 5
  • Odpowiedz
@Nofenak:
Nie zamykasz gdzieś połączenia, wszystkie dostępne połączenia w zdefiniowanej puli połączeń są w użyciu
... więc dostajesz timeout w oczekiwaniu na zwolnienie jakiegokolwiek połączenia.

Monitorujesz w jakikolwiek sposób ilość zajętych połączeń do bazy i czy one się zamykają z biegiem czasu ?
Zrób 1 iteracje testów i sprawdź ilość połączeń i co wg bazy jest wykonywane po zakończonym teście.
pewnie będzie tam coś wisiało ...

https://vladmihalcea.com/the-best-way-to-detect-database-connection-leaks/
  • Odpowiedz
@AfterAll

static void afterAll() {

postgres.stop();

}


@Nofenak: ale to musisz użyć po wszystkich testach integracyjnych. Postgresa w kontenerze startujesz raz a potem raz wyłączasz, kasujesz kontener. Co innego pula polączeń.

jeśli stosujesz beforeAll i afterAll do stopowania i startowania kontenera to lipa wydajnościowa. Startujesz kontener per klase? Tracisz mnóstwo czasu na połączenie i twoje testy trwają z 5x tyle czasu. A mogłby trwać z 5 razy mniej xD
  • Odpowiedz