Coding Planet

H2 동시접속 안되는 문제 해결하기(may be already in use) 본문

DB, SQL

H2 동시접속 안되는 문제 해결하기(may be already in use)

jhj.sharon 2024. 1. 4. 13:36
반응형

아래와 같이 application.properties에서 데이터베이스 연결 설정을 했다.

# H2
spring.datasource.url=jdbc:h2:file:C:/Users/Hyeonjeong.Jeon/test/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
# H2
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
# create > 기존 테이블 삭제하고 자동 재성성, update 업데이트
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.SQL = debug
logging.level.org.hibernate.type.descriptor.sql = debug

 

하지만 이렇게 접속할 경우 어플리케이션이 실행되는 동안 H2 콘솔에 접속하지 못하는 문제가 발생했다.

 

Exception in thread "main" org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-161]

 

다른 애플리케이션이나 프로세스가 동일한 H2 데이터베이스에 접속하여 데이터베이스를 사용 중인 경우에는 H2 연결이 불가한 것이다.

 

이 문제를 해결하기 위해서는 TCP 모드로 접속해야 한다.

 

TCP를 사용하면 H2 데이터베이스를 클라이언트-서버 아키텍처로 활용할 수 있다. 데이터베이스 서버는 데이터베이스 파일에 액세스하고 클라리언트 애플리케이션은 데이터베이스 서버와 통신하여 데이터를 요청하고 관리할 수 있는 것이다. 이를 통해 다수의 크라이언트가 동시에 데이터베이스에 접속하여 작업할 수 있다. 각 클라이언트가 고유한 연결을 가지며 데이터베이스를 독립적으로 조작할 수 있게 된다.

 

1. application.properties에서 url경로를 아래와 같이 수정한다.

  • jdbc:h2:tcp://  형식
  • 이 때 포트번호는 임의로 할당할 수 있다. 
# H2
#url 경로 수정
spring.datasource.url=jdbc:h2:tcp://localhost:9092/~/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=1234

 

 

2. H2 콘솔 로그인에서 url경로도 위와 같은 형식으로 수정한다.

 

 

 

 

3. 동시접속 성공!

 

반응형
Comments