Database ( DB )/Database

Spring boot JPA 서버 실행 시 초기값 자동 insert

노루아부지 2022. 10. 14. 18:47

H2 데이터베이스는 메모리 데이터베이스이기 때문에 데이터베이스를 따로 설치할 필요가 없어서 혼자 공부할 때 많이 사용됩니다.

참고: H2 설정 방법

 

그런데 H2 데이터베이스를 사용하면 좀 화나는 일이 있는데 프로그램을 다시 실행할 때마다 데이터베이스가 초기화된다는 것입니다.

프로그램의 오류를 발견해서 고쳐서 다시 실행하면 데이터를 처음부터 다시 넣어야 하는 것이죠.

 

이 때 resources 폴더 안에 import.sql 파일을 만들면 서버를 실행할 때마다 import.sql 안에 작성한 sql문을 실행합니다.

Spring boot JPA 서버 실행 시 초기값 자동 insert

 

 

import.sql의 내용은 다음과 같습니다.

insert into t_user(user_id, user_name) values('hong', '홍길동');
insert into t_user(user_id, user_name) values('lim', '임꺽정');
insert into t_user(user_id, user_name) values('kim', '김유신');
insert into t_user(user_id, user_name) values('gang', '강감찬');

 

이다음 프로그램을 시작하면 다음과 같이 데이터가 들어갑니다.

Spring boot JPA 서버 실행 시 초기값 자동 insert

 

만약 import.sql 대신 다른 이름을 쓰고 싶다면 application.properties에 다음과 같은 코드를 추가합니다.

spring.jpa.defer-datasource-initialization=true 
spring.sql.init.data-locations=classpath:data.sql;   //데이터 관련
spring.sql.init.schema-locations=classpath:schema.sql; // 테이블 생성 관련

 

spring.jpa.defer-datasource-initialization=true 옵션이 없다면 h2가 초기화돼서 DB에 테이블이 생성되는 것보다 data.sql을 통해 insert 되는 것이 먼저 일어나서 테이블을 찾을 수 없다는 에러가 발생합니다.

728x90
loading