[H2] Database "mem:testdb" not found, either pre-create it or allow remote database creation 해결

Version

SpringBoot Version: 3.3.0

H2 Database Version: 2.2.224

 

SpringBoot가 3.x대 버전으로 업그레이드 되면서 기존에 DB를 자동으로 생성해주던 버젼인  1.4.197 이하의 H2 Database 버젼은 지원하지 않게 되었다.(404 Error 발생)

 

따라서 위의 문제를 해결하기 위해 수동으로 데이터베이스를 생성해주어야한다.

 

Code

기존 application.yml 파일

spring:
  application:
    name: user-service
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console

 

수정된 application.yml 파일

spring:
  application:
    name: user-service
  h2:
    console:
      enabled: true
      settings:
        web-allow-others: true
      path: /h2-console
  datasource:
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:testdb
    username: sa
    password:
  jpa:
    hibernate:
      ddl-auto: create-drop 
    show-sql: true

 

JPA의 `ddl-auto`기능을 활용하여 해결할 수 있다.

 

`ddl-auto` 기능을 사용할 경우, SpringBoot Application이 실행될 때, 자동으로 `@Entity`가 선언된 테이블을 생성하며 자동으로 Database도 생성하게 된다.

 

Database 생성을 위한 Entity

package com.example.userservice.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Data;

@Entity
@Data
class Test {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

}

 

pom.xml (필요 dependency)

<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.2.224</version>
    <scope>runtime</scope>
</dependency>

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

 

위와 같이 설정한 뒤, H2 Database에 접속하면 Test라는 테이블 생성과 함께 DB에 접속할 수 있다.

 

참고: https://shanepark.tistory.com/435