반응형

작성일자 : 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

 

 

반응형

'Java' 카테고리의 다른 글

[MyBatis] List 형식 멤버 변수 조회  (0) 2021.02.12
[Spring] Web Cache 적용  (0) 2020.12.19
[Spring] App 구동 후 자동 작업 실행  (0) 2020.02.23
Stream Example  (0) 2020.01.05
리스트 순환 중 아이템 삭제  (0) 2019.12.08

+ Recent posts