스프링부트 실행 시, Database sql 데이터 삽입

Nam_JU·2022년 4월 24일
3

Spring

목록 보기
7/11
post-custom-banner

공부배경

협업 프로젝트를 하다가 기획자님의 요구사항이 있었다.
기본 질문사항 10가지가 미리 들어가 있을 수 있는지에 대한 여부였는데
스프링부트가 실행되자마자 데이터를 삽입시키면 될거라는 생각이들어 적용하게 되었다.


적용 방법

1. 쿼리가 맞는지 먼저 데이터베이스 상에서 불러보기

스프링부트 서버 실행시 ddl-auto로 자동으로 테이블이 생성되어야 한다.
그후 내가 원하는 값이 제대로 들어가지는지 쿼리와 데이터를 확인한다.


2. 스프링부트 resource에 sql파일 생성

최대한 에러가 나지 않도록 대문자로 쿼리를 변경,
테이블명 확인하기
해당 쿼리를 스프링부트 resource에 sql파일을 생성하여 집어 넣는다


3. application yml 파일 수정

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버전을 사용하고 있음으로

  • slq.init.mode
  • defer-datasource-initialization: true를 설정함

sql.init.mode : 스크립트 동작 설정

ALWAYS: 모든 데이터베이스에 sql 스크립트를 동작시킨다.

defer-datasource-initialization: true

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

profile
개발기록
post-custom-banner

0개의 댓글