협업 프로젝트를 하다가 기획자님의 요구사항이 있었다.
기본 질문사항 10가지가 미리 들어가 있을 수 있는지에 대한 여부였는데
스프링부트가 실행되자마자 데이터를 삽입시키면 될거라는 생각이들어 적용하게 되었다.
스프링부트 서버 실행시 ddl-auto로 자동으로 테이블이 생성되어야 한다.
그후 내가 원하는 값이 제대로 들어가지는지 쿼리와 데이터를 확인한다.
최대한 에러가 나지 않도록 대문자로 쿼리를 변경,
테이블명 확인하기
해당 쿼리를 스프링부트 resource에 sql파일을 생성하여 집어 넣는다
spring:
config:
activate:
on-profile: locald
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://엔드포인트.rds.amazonaws.com/스키마명?serverTimezone=Asia/Seoul
username: 로그인
password: 비밀번호
jpa:
hibernate:
ddl-auto: create-drop
show-sql: true
properties:
hibernate:
dialect: org.hibernate.dialect.Mysql8Dialect
defer-datasource-initialization: true -> 추가
sql:
init:
mode: always -> 추가
가장 중요한점은 내 프로젝트의 gradle버전이다.
나의 경우 2.5 이상의 2.6버전을 사용하고 있음으로
ALWAYS: 모든 데이터베이스에 sql 스크립트를 동작시킨다.
2.5이상의 버전부터 data.sql 스크립트는 Hibernate가 초기화되기 전에 실행된다고 한다. data.sql을 사용하여 Hibernate에 의해 생성된 스키마를 채우려면 spring.jpa.defer-datasource-initialization을 true로 설정하라고 지시되어 있다.
대략 1시간만에 프론트님의 수정사항을 해결했다는 것에 감격...!
협업을 하면서 여러가지로 시도해보고 배우는 것 같다.
https://sas-study.tistory.com/354
https://milenote.tistory.com/70
https://pasudo123.tistory.com/394
https://ryeon9445.com/develop/1-springboot/
https://godekdls.github.io/Spring%20Boot/howto.data-initialization/
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.5-Release-Notes#hibernate-and-datasql