본문 바로가기
💻 하나씩 차곡차곡/Back-end

[스프링(Spirng)] Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. 해결방법

by 뚜루리 2024. 12. 24.
728x90
320x100

[문제발생]

스프링스타터를 이용하여 프로젝드를 생성해서 첫 Run을 했더니 아래와 같은 에러메세지가 떴다.
***************************
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


Action:

Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).


Process finished with exit code 1

 

 


 

[원인]

MySQL을 Depencies에 추가한 상태인데 MySQL은 별도의 설정이 필요함. 근데 그 설정을 안해줘서 생기는 에러!


 

[해결]

  • application.properties 또는 application.yml 이름의 설정파일을 만들어 준다. (properties, yml 형식 아무 거나 상관없음.) 근데 보통 프로젝트 만들면 기본적으로 설정파일이 생성되어 있긴 함. 이미 생성되어 있다면 MySQL관련 내용을 추가만 해주면 됨!

  • application.properties 또는 application.yml 의 위치는 프로젝트>src>main>resources 하위에 생성해주면 됨.

 

 

1. application.properties

[형식]

spring.datasource.url=jdbc:Database종류://localhost:포트번호/Database스키마
spring.datasource.username=DB아이디
spring.datasource.password=DB비밀번호
spring.datasource.driver-class-name=JDBC드라이버

[예시]

spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/bookbookclub?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=비밀번호는비밀임
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  • Database 종류 : mySQL, Oracle 등 본인이 사용하는 데이터베이스 종류를 씀.
  • 포트번호 : 데이터베이스에서 사용하는 포트번호
  • Database 스키마 : 미리 생성한 데이터베이스 이름

 

※ 디비에버에서 포트번호랑 데이터베이스 이름을 쉽게 확인가능함.

 

 

(+) spring.datasource.driver-class-name에는 어떤 JDBC드라이버를 적어야 하는 건가요?

보통 MySQL을 사용할 경우 com.mysql.cj.jdbc.Driver와 net.sf.log4jdbc.sql.jdbcapi.DriverSpy를 많이 쓰고 각 드라이버는 아래와 같은 특징을 가진다.

  • com.mysql.cj.jdbc.Driver : MySQL의 공식 JDBC 드라이버이자 표준. 가장 기본적인 드라이버.
  • net.sf.log4jdbc.sql.jdbcapi.DriverSpy : 기존 JDBC 드라이버의 동작을 확장하여 SQL 로깅 및 디버깅 기능을 추가한 드라이버.

그런데 나는 조금 더 편리한 개발을 위해 로깅 및 디버깅 기능이 추가된 net.sf.log4jdbc.sql.jdbcapi.DriverSpy를 사용했음.

 

 

(+) net.sf.log4jdbc.sql.jdbcapi.DriverSpy를 사용하려니 빨간줄이 떠요!

당연함. build.gradle에 아래와 같은 의존성을 추가하지 않아서 그렇다. 아래와 같이 추가해줌. (버전은 달라질 수 있음!)

implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16'

 

(+)  serverTimezone=UTC&characterEncoding=UTF-8 이건 왜 써주는 건가요?

  • serverTimezone=UTC : MySQL 서버와 애플리케이션 간 시간대 차이로 인한 문제를 방지하기 위함.
  • haracterEncoding=UTF-8 : 문자셋 불일치로 인한 데이터 깨짐 현상 방지. 국제 표준인 UTF-8로 설정.

 

  •  

 


 

2. application.yml

[형식]

spring:
  datasource:
    url: jdbc:log4jdbc:mysql://localhost:포트이름/데이터베이스이름
    username: 데이터베이스아이디
    password: 데이터베이스비밀번호
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy

[예시]

spring:
  datasource:
    url: jdbc:log4jdbc:mysql://localhost:3306/bookbookclub?serverTimezone=UTC&characterEncoding=UTF-8
    username: root
    password: 비밀번호는비밀임
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
  • yml는 계층구조이기 때문에 들여쓰기가 중요함!

 


설정해준 후 다시 돌려보면 잘 됨!

728x90
320x100