Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine suitable jdbc url - spring boot 3 datasource 설정

신규 프로젝트를 진행하는데 

Spring Boot 2 -> 3으로 변경하면서 JAVA 17버전으로 올리는 것도 진행했다.

기존 프로젝트의 설정을 그대로 사용하지 않고 새로 set up을 했는데 그 과정에서 별 것도 아닌데 많은 오류를 만나게 되었다.

 

 

이전엔 아래와 같이 작업했는데 

 

오류 - 'url' attribute is not specified and no embedded datasource could be configured.Reason: Failed to determine suitable jdbc url

spring:
  datasource:
    hikari:
      jdbc-url: jdbc:log4jdbc:mariadb:/localhost:3306
      username: 
      password: 
      driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
      maximum-pool-size: 4
      minimum-idle: 1
      connection-timeout: 60000
      max-lifetime: 60000

 

Spring 2.7.2 버전

 

spring:
  datasource:
    url: 
    username: 
    password:
    driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
    hikari:
      maximum-pool-size: 4
      minimum-idle: 1
      connection-timeout: 60000
      max-lifetime: 60000

 

Spring 3.2.5 버전

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
fun dataSourceProperties(): DataSourceProperties {
    return DataSourceProperties()
}

@Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari")
fun dataSource(dataSourceProperties: DataSourceProperties): HikariDataSource {
    // HikariDataSource를 사용하기 위해 Hikari 설정 객체를 생성자로 넣은 HikariDataSource 객체 반환
    val dataSource: HikariDataSource =
        dataSourceProperties.initializeDataSourceBuilder().type(HikariDataSource::class.java).build()
    if (StringUtils.hasText(dataSourceProperties.name)) {
        dataSource.poolName = dataSourceProperties.name
    }
    return dataSource
}

 

기존엔 @ConfigurationProperties(prefix = "spring.datasource.hikari") 하나의 bean만 생성하여 HikariDataSource type의 클래스를 리턴하도록 하였는데 Spring Boot 버전이 올라가면서 설정하는 방식이 변경된 것 같다.

spring.datasource에 해당하는 빈을 만들고 spring.datasource.hikari 빈을 만들면서 만들어놓은 datasource를 hikariDataSource type으로 초기화하면서 dataSource를 반환하도록 했다.

 

오류 - Driver net.sf.log4jdbc.sql.jdbcapi.DriverSpy claims to not accept jdbcUrl, jdbc:log4jdbc:mariadb://istg15-db.fassto.ai:3306/fsswms?useUnicode=true&characterEncoding=utf8mb4&autoReconnect=true&allowMultiQueries=true

 

driverClass에 해당하는 JDBC가 없을 때 발생한다.

 

기존에는 mariadb를 사용할 때 mysql(runtimeOnly 'mysql:mysql-connector-java')을 JDBC로 사용해도 문제가 없었는데 Spring Boot 3으로 올리면서 엄격하게 타입 체크를 하는 것 같다.

 

mariadb(runtimeOnly("org.mariadb.jdbc:mariadb-java-client:3.3.2"))로 JDBC를 변경하니 오류 없이 DB 세팅은 완료되었다.

 

Spring Boot 3이 되면서 datasource 관련된 설정 방식이 기존과 다르게 많이 변경된 것 같다.

 

이번에 또 느낀게 인터넷에 있는 설정들은 내 작업물과 100% fit하지 않기 때문에 본인 설정 방식에 맞는 것을 오류 메시지를 통해서 파악해야한다!

반응형