문제 발생
테스트 코드를 작성하며 테스트를 진행하고 있는데 여러개의 조회나, 조건을 이용한 조회를 이용할 때에 사용하기 위한 데이터를 먼저 넣어 놓으려고 data.sql 파일을 작성을 했지만, data.sql의 쿼리들이 실행되지 않는 문제가 발생하였습니다.
해결 과정
구글에 'Spring Boot data.sql not working' 을 검색해보니 저와 유사한 문제가 일어난 사람들이 많았습니다. 주된 답변으로는 Spring Boot 2.5x 버전 부터는 `spring.jpa.defer-datasource-initialization: true` 가 필요하다는 것 이었습니다.
저는 해당 코드를 추가했고, 그래도 여전히 data.sql은 실행되지 않고 있었습니다. 그래서 더 찾아보니 다른 답변 중에는 `spring.datasource.initialization-mode: always` 코드가 필요하다는 의견도 있었습니다. 이 코드는 Spring Boot 2.5x에서의 변경과는 연관이 없어 보였지만 해당 코드를 추가하고 다시 테스트를 해보았습니다.
그리고 해결이 되었습니다. 혹시 몰라서 각각 하나씩 없앤 뒤 테스트를 해보았지만 두가지 코드가 모두 존재할 때에만 data.sql을 인식하고 쿼리를 실행하여 데이터가 들어가 있게 되었습니다. 결론적으로 사용하는 application.yml 입니다.
#application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Seoul&characterEncoding=UTF-8
username:
password:
data: classpath:data.sql
initialization-mode: always
#JPA 정보
jpa:
hibernate:
ddl-auto: create
database-platform: org.hibernate.dialect.MySQL5Dialect
defer-datasource-initialization: true
만약
`spring.jpa.defer-datasource-initialization: true` 와 `spring.datasource.initialization-mode: always` 이렇게 두개를 모두 추가하였는데도 인식이 되지 않는다면 `spring.jpa.hibernate.ddl-auto`를 create 나 create-drop 값으로 설정해 놓았는지 확인해보는 것이 좋을 것 같습니다. 일단은 hibernate를 이용해서 db를 생성하도록 만들어 놓아야 data.sql의 쿼리들이 실행 될 테이블이 존재할 수 있기 때문에 create, create-drop으로 설정을 해 놓아야 합니다.
'Study > Spring' 카테고리의 다른 글
[Spring] @RequiredArgsConstructor 이란? (0) | 2022.03.06 |
---|---|
[Spring] null check 잊지 않기, 메모는 바로바로 하기 (0) | 2022.01.31 |
[Spring] Spring Boot NoUniqueBeanDefinitionException 문제 (0) | 2022.01.30 |
[Spring] data.sql으로 입력된 데이터 9시간 차이 문제 (1) | 2022.01.28 |
[Spring Security] Spring Security 500 error page ( "status" : 999 ) (0) | 2021.01.02 |