Spring Boot 2.5.1 を使用しています。
DBは、postgresql-12.7-2です。
@SpringBootTest + @AutoConfigureMockMVCを使用して、
Junitのテストケースを書いています。
Java
1@SpringBootTest 2@AutoConfigureMockMVC 3public class sampleTest01 { 4 5 @Autowired public MockMVC moc; 6 7 @MockBean TestService testService; 8 9 @Test 10 void 試験その1() { 11 when(testService.check(any()).thenReturn(true); 12 mvc.perform(get("/test")).andExpect(status().isOK); 13 } 14}
Java
1@SpringBootTest 2@AutoConfigureMockMVC 3public class sampleTest02 { 4 5 @Autowired public MockMVC moc; 6 7 @MockBean SampleService sampleService; 8 9 @Test 10 void 試験その2() { 11 when(sampleService.check(any()).thenReturn(true); 12 mvc.perform(get("/samples")).andExpect(status().isOK); 13 } 14}
gradleでこれらの試験を実行した結果、
テストクラス実行ごとにspring bootが起動して、
規定数(デフォルトは10?)のコネクションプールを作成するためにDBコネクションを取得します。
上記の例ではMockMVCを使用した試験が2クラスあるため、DBコネクションは20を消費します。
テストクラスを増やすたびにコネクションが必要となり、
やがてpostgresqlの同時接続数を上回りエラーとなります。
コネクションの開放は、ひととおり、試験が終わったあとにまとめて行われている様です。
試験後のログには、以下の様に出力されています。
log
12021/10/11 18:56:53 [SpringApplicationShutdownHook] 2HikariPool-1 - ShutDown initiated... 32021/10/11 18:56:53 [SpringApplicationShutdownHook] 4HikariPool-1 - ShutDown completed. 52021/10/11 18:56:53 [SpringApplicationShutdownHook] 6HikariPool-2 - ShutDown initiated... 72021/10/11 18:56:53 [SpringApplicationShutdownHook] 8HikariPool-2 - ShutDown completed. 92021/10/11 18:56:53 [SpringApplicationShutdownHook] 10HikariPool-3 - ShutDown initiated... 112021/10/11 18:56:53 [SpringApplicationShutdownHook] 12HikariPool-3 - ShutDown completed. 132021/10/11 18:56:53 [SpringApplicationShutdownHook] 14HikariPool-4 - ShutDown initiated... 152021/10/11 18:56:53 [SpringApplicationShutdownHook] 16HikariPool-4 - ShutDown completed.
どなたか、このケースの回避方法をご存知の方はいらっしゃいますでしょうか?
せめてテストクラスごとにSpringBootをShutDownしてコネクションを開放できれば良いと考えております。
どうも、HikariCPのshutdownがJVMの終了にフックされている様な気もする。。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。