IT/Spring

Springboot에서 h2 Database 설정

eddie_factory 2021. 12. 10. 11:42
반응형

Springboot를 사용하면서 간단하게 인메모리 데이터베이스 구성하여 확인하기 위해 사용합니다.

 

1. dependency 추가 (maven)

  - DB연결을 하기 위한  jdbc 인터페이스 추가

  - h2 dependency를 추가  (사용하는 DB에 따라 맞는 dependency를 추가합니다.)

 

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

 

2. Configuration

application.yml (Springboot 프로젝트에 포함된  application.properties 또는 application.yml에 설정)

spring:
  h2:
    console:
      enabled: true
      path: /h2-console

  datasource:
    url: jdbc:h2:~/test
    driver-class-name: org.h2.Driver
    username: sa
    password:
    initialization-mode: always
    
  sql:
    init:
      mode: always

path : 

 - 브라우저 접속시 url (ex: localhost/h2-console)

sql.init.mode: (기본값은 never)

 -  classpath 루트에 있는 schema.sql로 데이터 베이스 스키마 생성하는 기능을 기본적으로 embedded DB에만 지원.

    다른 DB사용시에는 initialization-mode: always 설정을 해줘야 프로젝트 runtime시에 schema.sql이 실행 됩니다.

    (저는 jpa 설정 때문인지 embedded DB인데도 자동 생성되지 않아서 설정했습니다.) 

 

sql.init.mode : always 설정시 classpath 루트에 있는 schema.sql, data.sql를 읽어 생성합니다. (yml설정을 통해 path나 파일명 변경 가능)

 - schema.sql :  DDL 데이터 구조문

 - data.sql : DML 명령문

 

3. Spring에서 JPA / Hibernate

 - H2 DB hibernate 사용시 충돌이 발생할 있는 부분이 있음

 - spring.jpa.generate-ddl=true (properties 기준) 설정시Spring EntityScan 통해 @Entity 애노테이션이 명시한 클래스를 찾아

DDL문을 생성합니다.

- Hibernate는 classpath 루트의 import.sql를 읽어 프로젝트 runtime시 실행 됩니다.

   만약 Spring 인식하는 schema.sql, data.sql과  import.sql 내용이 중복된다면 오류가 발생할 수 있습니다.

 

 

추가로 Springboot 2.5 이후 버전 사용시 hibernate와 data.sql 추가 사용설정시 참조블로그입니다.

- https://sdy-study.tistory.com/272 (Spring Boot 2.5 이후 버전과 Hibernate data.sql)

 

 

 

 

반응형