포스트

H2 issue - org.h2.mvstore.MVStoreException: java.lang.AssertionError

에러 문구

1
2
3
4
5
6
7
Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed
to execute SQL script statement #1 of class path resource [schema-h2.sql]...
...
..
...
General error: "General error: ""org.h2.mvstore.MVStoreException: 
java.lang.AssertionError: 36864 != 32768 [2.2.224/3]"" [50000-224]" [50000-224]



원인

embedded로 사용하던 h2 db 파일 손상



해결 방법

처음 실행하는 테스트를 지정해 둔 상태였기 때문에 첫 번째 테스트 코드 실행 전 사용하던 db 파일 삭제 후 실행 되도록 코드를 추가

TestRepositoryTest.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Order(0)  
@SpringBootTest  
class TestRepositoryTest {

    @BeforeAll  
    static void h2Init() {  
        String dbFilePath = "./h2/member-test.mv.db";  
        String traceFilePath = "./h2/member-test.trace.db";  
  
        deleteFile(dbFilePath);  
        deleteFile(traceFilePath);  
    }  

    private static void deleteFile(String filePath) {  
        File file = new File(filePath);  
        String fileName = file.getName();  
        String result = file.exists() && file.delete() ? "성공 ⭕️" : "실패 ❌";  
  
        System.out.printf("======= `%s` \t 삭제 %s =======%n", fileName, result);
    }
}





에러를 해결하면서 든 생각

그동안 공부 용도로 프로젝트를 진행하면서 간편한 사용성으로 인해 h2 db 만 사용해오고 있었는데, 앞으로는 h2 db의 사용을 자제해 보는 것이 좋겠다는 생각이 들었다.

사용한다면 테스트에서 인메모리 방식으로 잠깐씩 사용해보는 것으로!!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.