직면한 문제
기존에 h2 데이터베이스를 썼을 때, 사용했던 설정에서는 data-h2.sql 파일이 mysql에는 적용되지 않음.
MySQL 연동하기
dependencies {
implementation 'mysql:mysql-connector-java'
}
먼저 mysql에 대한 의존성을 추가해주고, build.gradle을 refresh해서 적용시켜줍니다.
해결 방법
mysql을 이용하기 위한 application.yml 설정을 먼저 해줍니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/{스키마 이름}?serverTimezone=UTC&characterEncoding=UTF-8
driver-class-name: com.mysql.cj.jdbc.Driver
username: {사용자이름}
password: {비밀번호}
여기까지 설정해주면 기존에 h2 데이터베이스에서 실행되던 모든 것들이 mysql에서 실행이 됩니다. 테이블 생성까지는 모두 적용이 됐지만, 기존에 있는 data-h2.sql에 있는 초기 데이터 적용을 위한 sql 문이 실행이 되지 않았습니다.
INSERT INTO posts (created_date, modified_date, title, content, author) VALUES (now(), now(), '제목1', '본문1', '작성자1');
INSERT INTO posts (created_date, modified_date, title, content, author) VALUES (now(), now(), '제목2', '본문2', '작성자2');
위 코드는 data-h2.sql 파일 안에 있는 내용입니다. 이제 우리는 h2 데이터베이스가 아니고 mysql을 사용하기 때문에 파일이름을 먼저 data.sql로 바꿔줬습니다.
그 다음 아래와 같은 application.yml 설정을 추가해줬습니다.
sql:
init:
mode: always
jpa:
defer-datasource-initialization: true
hibernate:
ddl-auto: create-drop
sql.init.mode.always는 모든 데이터베이스에 sql 스크립트를 적용하겠다는 설정입니다. 다음으로 jpa.defer-datasource-initialization.true는 h2 데이터베이스 게시글에도 설명했듯이 springboot 2.5 버전 이상부터는 data.sql 스크립트는 Hibernate가 초기화 되기 전에 실행된다고 한다. Hibernate가 초기화 된 후 sql 스크립트를 적용하기 위한 설정입니다.
data.sql에 있는 sql 스크립트가 서버를 돌렸을 때, 데이터가 초기화되는 것을 확인할 수 있습니다.
'🧑🏻💻 Dev > SpringBoot' 카테고리의 다른 글
[Spring] ExceptionHandler가 작동안 되는 오류 (컴포넌트 스캔) (0) | 2023.04.03 |
---|---|
[Spring] 프로젝트 실행 시 Please Sign in 페이지 해결 (0) | 2023.02.19 |
[Spring] Mac OS : Web server failed to start. Port 8080 was already in use 문제 해결하기 (0) | 2023.02.19 |
[SpringBoot] Annotation(@) 기능 정리 (0) | 2023.01.17 |
[SpringBoot] data-h2.sql 파일 작동 안되는 오류 (version 2.7.7) (0) | 2023.01.17 |