• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

앱 종료시 "DB 이미 꺼짐" 오류에 대하여

22.06.05 03:40 작성 조회수 2k

1

현재까지 작성한 모든 API는 정상적으로 작동합니다.

 

다만 앱을 종료할 때 오류가 나더군요.

org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL) [90121-212]

 

그래서 약간의 찜찜함(?)이 남아있는데 어떻게 하면 해결할 수 있을까요?

 

참고로 저의 application.yml의 내용은 다음과 같습니다.

spring:
main:
allow-bean-definition-overriding: true
jpa:
show-sql: true
hibernate:
ddl-auto: create-drop
defer-datasource-initialization: true # data.sql hibernate보다 먼저 실행되지 않도록 지연
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
h2:
console:
enabled: true

답변 1

답변을 작성해보세요.

2

안녕하세요, 이도원입니다. 

답변이 늦어 죄송합니다.

H2 DB를 In-Memory로 기동하실 때는 DB_CLOSE_ON_EXIT 설정은 사용하지 않고, DB_CLOSE_DELAY=-1 옵션만 추가해서 사용하도록 권장합니다. In-Memory에서는 기본적으로 마지막 연결이 끊어지면, DB를 닫고 있는데, 애플리케이션이 종료되기 직전에 모든 연결이 끊겨 DB가 CLOSE가 된 상태에서 스프링에서 DB까지 제어하기 위한 옵션(DB_CLOSE_ON_EXIT=FALSE)을 추가하여 inMemoryDatabaseShutdownExecutor가 실행되었는데, 이미 커넥션은 모두 종료되었기 때문에 해당 오류가 발생하였고, 오류 메시지는 그냥 다음과 같이 발생시키고 있습니다.

 Database is already closed (to disable automatic closing at VM shutdown, add ";DB_CLOSE_ON_EXIT=FALSE" to the db URL)

아래 문서를 참고해서 설정을 변경해 보시기 바랍니다. 

http://www.h2database.com/html/features.html#in_memory_databases

감사합니다.