Spring boot 3.2.X H2 database 설정

권광재·2024년 3월 18일
0

springboot

목록 보기
3/3

H2 설정

오랜만에 프로젝트를 진행하게 되면서 H2 database를 사용하게 되었다. 사실 설정이 어렵지 않은 내용이라 금방 넘어갈 수 있을거라고 생각했지만 실행을 돌려보니 오류가 3개나 발생하였다. 이것에 대한 해결책을 남겨보려고 한다.

Caused by: org.h2.mvstore.MVStoreException: The write format 2 is smaller than the supported format 3 [2.2.224/5] 에러

이 에러가 발생하였을 때 왜 버전문제가 일어나는지에 대해 의문을 가졌다.

언제나 그렇듯 인텔리제이에서 지원해주는 형식으로 h2를 받았고

runtimeOnly 'com.h2database:h2'

형식으로 build.gradle에서 형식을 받아왔다

그렇게 하니 2.2.2.224버전이 다운받아졌는데 이것이 문제였다. 인텔리제이에서 준 그대로 실행을 돌리는게 왜 문제가 생겼는지 의아했지만 버전 문제는 언제나 어떤게 문제인지 모르는게 맞다.

버전확인을 통해
그래도 나름 안정적으로 활용이 되는 2.1.214버전을 사용하였고

runtimeOnly 'com.h2database:h2:2.1.214'

문제가 해결이 되었다.

Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided),

Caused by: org.hibernate.HibernateException: Unable to determine Dialect without JDBC metadata (please set 'jakarta.persistence.jdbc.url' for common cases or 'hibernate.dialect' when a custom Dialect implementation must be provided)

Hibernate Dialect를 설정하여야하는 오류도 발생하였다

그것에 대한 부분은 설정부분을 추가하면서 해결을 하였다

spring:
  # H2 Setting Info
  h2:
    console:
      enabled: true  # H2 Console을 사용할지 여부
      path: /h2-console # H2 Console의 Path

    # Database Setting Info (Database를 H2로 사용하기 위해 H2연결 정보 입력)
  datasource:
###     driver-class-name: org.h2.Driver
    url: jdbc:h2:~/t
    username: sa
    password: 44

  jpa:
    database-platform: org.hibernate.dialect.H2Dialect #추가
    hibernate:
      ddl-auto: create #데이터베이스 스키마를 자동으로 생성 여부
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect #추가 
        format_sql: true
#        use_sql_comments: true # sql 과 함께 jpql 주석처리되어  콘솔창에 출력
        # show-sql: true

이것에 대한 설정은 버전과 인식이 잘 되었다면 추가하지 않아도 해결되는 부분이다. 이때까지는 운?이 좋아서 그런지는 몰라도 설정을 따로 해주지 않아도 하이버네이트가 알아서 잘 받아줬었는데 이번에는 제대로 설정을 해주어야 했다.

추가 내용

이제 이 모든 내용을 끝마치고 편안하게 오류수정을 완료했다고 생각했는데 갑자기 또 작은 에러가 났다.

Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000a drop table if exists [*]user cascade "; expected "identifier"; SQL statement:

SQL 문장의 구문에 문제가 발생한 것인데 내가 아직 만든 것은 User 엔티티에 대한 간단한 내용 뿐이였다. 그때 갑자기 번쩍 H2에서 User라는 테이블을 만들지 못했었던 것 같은 생각이 들어 테이블 명을 바꿔주니

package com.example.welcometravel.domain.user.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name = "Users")
public class User {
	 @Id
	 @GeneratedValue(strategy = GenerationType.IDENTITY)
	 private Long id;

	private String userName;
	 @Column(unique = true, length = 100)
	 private String email;

	 private String password;


}


잘 실행이 된다.

profile
안녕하세요

0개의 댓글