springBoot-H2database연동하기
이번 포스팅은 springBoot project에 H2database를 연동하는 방법을 글로 작성해보았습니다.
gradle설정
gradle에 h2, jdbc 설정값추가
저는 jpa도 같이 활용하기 위해서 jpa설정값도 추가해줬습니다.
application.properties추가
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.database-platform=H2
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.sql.init.schema-locations=classpath:h2/schema.sql
- jdbc:h2:mem:test <- Database 명
: Embedded 설정값
in-memoryDB사용시에는 jdbc:h2:mem:(DB명)으로 설정해줘야합니다.
: Server 설정값
jdbc:h2:tcp://localhost/~/(DB명) # Tcp, Server 모드 주소 설정
- ddl-auto
: create-drop은 테이블이 없으면 테이블을 자동생성해줍니다.
- console.enabled
: h2콘솔사용여부, 사용할 경우 console.path를 지정해줍니다.
- schema-locations
: 프로젝트 최초 실행시 스키마 동작파일 위치
resources/h2/schema.sql
DROP TABLE IF EXISTS users;
CREATE TABLE users(
id INT PRIMARY KEY,
user_id VARCHAR(30),
user_password VARCHAR(100),
user_repassword VARCHAR(100),
name VARCHAR(30)
);
console열기
http://localhost:8080/h2-console
h2콜솔이 정상적으로 열리는 것을 확인할 수 있었습니다.
* 시행착오
STS프로젝트내에서는 정상동작, 외장 tomcat사용시 h2DB가 동작안함
: 제 생각에는 설정값을 어떻게 주냐에 따라 외장톰캣에서도 사용할 수 있었던 것같습니다.
initialize: true <- 해당 설정값을 true로 해줘야 .sql파일을 정상적으로 읽을 수 있었습니다.
* 주의사항
ddl-auto 옵션
- create: 기존테이블 삭제 후 다시 생성 (DROP + CREATE)
- create-drop: create와 같으나 종료시점에 테이블 DROP
- update: 변경분만 반영
- validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
- none: 사용하지 않음
실제 운영서버에서는 create,create-drop,update는 사용하면 안됩니다.
현재 제가 설정한 DB는 휘발성이므로 설정값을 create-drop으로 주었습니다.