[Spring] 스프링부트 최초 구동 시 UnsatisfiedDependencyException 관련 에러 해결

jomminii·2022년 9월 1일
1

side-blog-v1

목록 보기
1/4

start.spring.io 에서 프로젝트를 구성할 때 JPA를 사용하기 위해 Spring Data JPA 를 dependencies 에 추가할 수 있습니다.

이때 IDE 에서 추가 설정을 하지 않고 프로젝트를 run 하게 되면 요런 에러가 발생하게 됩니다.

 Exception encountered during context initialization - cancelling refresh attempt:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource
[org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: 
Unsatisfied dependency expressed through method 'dataSourceScriptDatabaseInitializer' parameter 0; 
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'dataSource' defined in class path resource
[org/springframework/boot/autoconfigure/jdbc/DataSourceConfiguration$Hikari.class]: 
Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: 
Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: 
Factory method 'dataSource' threw exception; 
nested exception is org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: 
Failed to determine a suitable driver class

어쩌구 저쩌구 길게 나오는데 저 dataSource가 에러 발생의 시발점 입니다.
dataSourceScriptDatabaseInitializer이란 빈을 생성하는데 에러가 생겼다고 하는데
아래 메시지를 보면 좀 더 이유를 명확히 알 수 있습니다.

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class

dataSource 를 설정해야하는데 필요한 정보들이 없다!

이제 이유를 명확히 알게 되었습니다.

아무 설정 없이 run 을 했기 때문에 dataSource를 초기화 할 수 없었던 거죠.

이제 설정을 하면 문제가 해결됩니다.

application.yml 이나 application.properties 같은 설정 파일에 아래처럼 spec 을 명시해주면 됩니다.

spring:
  datasource:
    username: xxxx
    password: xxxx
    url: jdbc:mysql://localhost:3306/[db name]?allowPublicKeyRetrieval=true&useSSL=false
    driver-class-name: org.mariadb.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQL8Dialect
    hibernate:
      ddl-auto: none

위와 같이 명시해주고 다시 run 을 하면 정상 구동되는 걸 확인해볼 수 있습니다.

에러만 잘 읽으면 되는데 예전에 처음 이 에러를 맞이했을 때 왜 그리 원인을 찾기가 어려웠는지...

profile
고민은 격렬하게, 행동은 단순하게

0개의 댓글