-
H2 DB "data.sql" 삽입 오류ETC 2024. 3. 26. 17:30728x90
버전 정보
id 'org.springframework.boot' version '3.2.4' java { sourceCompatibility = '17' }
문제 상황
H2 DB, 스프링 부트 3.x, Java 17을 기본 환경으로 로컬 서버를 운영할 때 마다 data.sql을 통해 데이터 삽입을 하고자 했다.
이전까지는 아래와 같은 설정만을 통해 간단히 데이터를 삽입할 수 있었는데 아래와 같은 오류가 발생해 이번엔 간단히 해결할 수 없었다.
H2 data.sql, Failed to execute SQL script statement
sql: init: mode: always
시도한 것들
- 가장 먼저 시도한것은 H2 DB를 다운그레이드 해보았다. (2.4.x -> 1.4.x) 실패
- 스프링 부트 3.x 버전으로 올라오면서 H2 DB 2.2를 기본으로 지원한다고한다 다시 업그레이드 시도, 실패
- Insert 쿼리가 테이블 생성전에 발생되는게 문제이기도하니 이를 지연 시키는 설정 시도, 실패
defer-datasource-initialization: true
해결
기본적으로 위에 언급한 init mode와 지연 설정은 필요한 설정이 맞았고, 정확한 문제 원인은 공식 문서를 통해 확인할 수 있었다.
In addition, a file named import.sql
in the root of the classpath is executed on startup if Hibernate creates the schema from scratch (that is, if the
ddl-auto property is set to create or create-drop).
This can be useful for demos and for testing if you are careful but is probably not something you want to be on the classpath in production. It is a Hibernate feature (and has nothing to do with Spring).이전까지 data.sql을 통해 insert 쿼리를 날렸지만 import.sql로 파일명을 변경해줘야한다.
YML 파일 설정 전문
spring: h2: console: enabled: true datasource: url: jdbc:h2:tcp://localhost/~/testdb driver-class-name: org.h2.Driver username: sa password: jpa: database-platform: org.hibernate.dialect.H2Dialect hibernate: ddl-auto: create-drop properties: hibernate: format_sql: true show_sql: true defer-datasource-initialization: true sql: init: mode: always logging: level: onddd.jwt: DEBUG
추가
오류 전문을 스크랩하기 위해 다시 data.sql로 파일명을 변경해서 로컬 서버를 운영하니 이번엔 오류가 발생하지않았다.
내부적으로 한 번 실행된 파일은 어딘가에 남아있는게 아닌가 싶다.
'ETC' 카테고리의 다른 글
H2 DB "start_value" 오류 (0) 2023.11.23 Unchecked overriding: return type requires unchecked conversion. Found (0) 2023.11.23 DND 9기 회고 (0) 2023.11.23 [회고]우테코 프리코스 (1) 2023.11.20