[SpringBoot] H2 연동
작성일자 : 2020.07.23
환경 : SpringBoot 2.1.6
목표 : H2 를 이용하여 Database 설치 없이, In Memory DB 를 사용하도록 설정
H2란?
자바 기반의 오픈소스 관계형 데이터 베이스 관리 시스템 (RDBMS)
H2DB는 서버(Server) 모드와 임베디드(Embedded) 모드의 인메모리 DB 기능 지원
1. 의존성 추가
In build.gradle
dependencies {
..
implementation 'com.h2database:h2'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
..
}
* 'spring-boot-starter-jdbc' or 'spring-boot-starter-data-jpa' 의존성을 추가하면 DataSource 구현체로 tomcat-jdbc을 제공
* H2 의존성을 추가하고 난 후, 설정 파일에 아무 설정이 되어 있지 않으면 스프링 부트는 자동적으로 H2 데이터베이스를 기본 데이터베이스로 사용
* spring-boot-starter-jdbc 의존성을 추가하면 DataSource, JdbcTemplate을 별다른 설정없이 주입하여 사용 가능(@Autowired 등)
2. Connection 확인
@Autowired
DataSource datasource
...
Connection connection = dataSource.getConnection()
System.out.println(connection.getMetaData().getURL());
System.out.println(connection.getMetaData().getUserName());
* H2 DB는 기본으로 testdb DB 명과, SA 유저를 사용 (Password는 없음)
3. 기본 DB 데이터 추가
@Autowired
DataSource dataSource;
...
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement();
String sql1 = "CREATE TABLE TESTTABLE(ID INTEGER NOT NULL, VALUE VARCHAR(255), PRIMARY KEY (ID) )";
statement.executeUpdate(sql1);
String sql2 = "INSERT INTO TESTTABLE VALUES(1, 'value')";
statement.execute(sql2);
4. H2-Console 확인
- Console 설정 추가
In Application.properties
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
- 설정 Path 로 접근 ( 위 설정에선 /h2-console )
Connection 에서 확인한 URL, Name 입력 (기본값은 jdbc:h2:mem:testdb , SA )
- 데이터 확인 (1, 'value')
DB 설정 코드
DatabaseConfig.java
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
@Component
public class DatabaseConfig implements ApplicationRunner {
@Autowired
DataSource dataSource;
@Override
public void run(ApplicationArguments args) throws SQLException {
try(Connection connection = dataSource.getConnection()){
System.out.println(connection.getMetaData().getURL());
System.out.println(connection.getMetaData().getUserName());
Statement statement = connection.createStatement();
String sql = "CREATE TABLE TESTTABLE(ID INTEGER NOT NULL, VALUE VARCHAR(255), PRIMARY KEY (ID) )";
statement.executeUpdate(sql);
String sql2 = "INSERT INTO TESTTABLE VALUES(1, 'value')";
statement.execute(sql2);
} catch (Exception e){
System.out.println(e);
}
}
}
* 주의
2020.07.23 기준으로 Spring Boot 프로젝트 생성 시 2.3.1 버전이 생성되는데, 이 버전에서는 H2 연동 시 기본 URL 값으로 testdb 가 아니라 Random 으로 생성됀다. ( 해당 글은 2.1.6 버전이 기준 )
이를 testdb 로 고정하기 위해서는 아래 config 추가
spring.datasource.generate-unique-name=false |
reference
https://engkimbs.tistory.com/782