최근에 H2 DB를 사용하면서 복습겸 알게된 사실이 있어서 간단히 작성했다
먼저 스프링 부트 3.x 기준으로 더 이상 이전 버전의 H2를 설정할 수 없다
강의를 보며 MSA 프로젝트 진행 중, 기존 방식대로 되지 않아서
H2를 서버모드로 바꾸어서 진행했다
H2의 두 가지 모드:: Embed, 서버 모드
H2에는 Embed(내장)과 서버 모드가 있는데
Embed은 스프링 부트에 포함된 H2를 돌리는 것이고
서버모드는 직접 H2를 수동으로 실행한 후에 스프링 부트를 실행해서 접근해서 사용하는 방식이다
서버모드는 Embed와 달리 서버를 중단시켜도 데이터가 휘발되지 않는다
서버모드를 사용하기 위한 과정은 아래와 같다
1. H2를 실행
2. H2 Embed 설정으로 실행한후 서버 종료
3. H2 서버 모드로 실행
다시 상세 설명하면
1. H2를 실행
윈도우의 경우는 h2.bat이고 리눅스 환경은 h2.sh이다
2. H2 Embed 설정으로 실행한후 서버 종료
아래의 설정으로 실행후 종료
spring.datasource.url: jdbc:h2:mem:testdb
3. H2 서버 모드로 실행
아래 설정으로 재실행한다
spring.datasource.url: jdbc:h2:tcp://localhost/mem:testdb
이제, 아래 실행된 콘솔 상의 데이터는 휘발되지 않는다
YAML 설정
spring:
h2:
console:
enabled: true
settings:
web-allow-others: true
path: /h2-console
datasource:
driver-class-name: org.h2.Driver
# url: jdbc:h2:mem:testdb # H2 Memory Mode
url: jdbc:h2:tcp://localhost/mem:testdb # H2 Server Mode
username: sa
jpa:
defer-datasource-initialization: true
sql.init.mode: always
Spring Boot 3.x에서 데이터 초기화 하기 (init data.sql)
spring.jpa.defer-datasource-initialization: true
spring.sql.init.mode: always
spring.sql.init.mode
번역: 초기화 수행 여부를 결정할 때 적용할 모드입니다.
해석: always로 설정하면 table 및 data.sql 을 초기화하다
spring.jpa.defer-datasource-initialization
번역: 데이터 소스 초기화를 EntityManagerFactory 빈이 생성 및 초기화될 때까지 연기할지 여부입니다.
해석: true로 설정하면 hibnerate에 의한 table 생성 후, data.sql 파일이 생성된다
참고 자료
스프링부트 실행 시, Database sql 데이터 삽입 (velog.io)
Spring Boot 2.5 Release Notes · spring-projects/spring-boot Wiki (github.com)
https://wildeveloperetrain.tistory.com/228
참고하면 좋은 자료
내용이 좋길래 아래 링크를 추가해두었다
Spring Boot 초기 데이터 설정 방법 정리(data.sql, schema.sql)
'Back-end > Spring Boot, JPA' 카테고리의 다른 글
Argument Resolver 등록 관련 디버깅 (feat. Spring MVC 흐름) (0) | 2023.06.20 |
---|---|
p6spy로 로그 포맷팅 (0) | 2023.06.16 |
spring security (2) | 2021.05.05 |
newlecture: spring MVC 1 (0) | 2021.04.26 |
newlecture: spring AOP (ft.빵또아) (0) | 2021.04.24 |
hi hello... World >< 가장 아름다운 하나의 해답이 존재한다
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!