Home
Spring
스프링부트 DataSource Property 설정 (SpringBoot, application.yml)
devfoxstar
devfoxstar
January 14, 2023
1 min

Table Of Contents

01
Application Property 자동 연결
02
설정 파일 분리
03
Java 파일에서 설정
04
Property Configuration 활용

SpringBoot에서 디비를 연결하기 위해 DataSource Property를 설정합니다.
디비를 연결하는 방법은 몇 가지가 있습니다.


Application Property 자동 연결

SpringBoot 프로젝트에서 기본 Property 설정 파일은 두 개가 있습니다.
application.propertiesapplication.yml 파일입니다.

최근에는 대부분의 프로젝트에서 application.yml 파일을 활용하는 추세입니다.

해당 파일들은 프로젝트가 실행될 때 자동으로 호출되고 등록됩니다.
따라서 별도의 추가 설정이 필요없습니다.

Spring DataSource 규칙에 맞게 설정 해주면 끝입니다.

spring:
  config:
    activate:
      on-profile: "local"
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/devfoxstar
    username: devfoxstar
    password: 1234

설정 파일 분리

환경에 따른 설정 파일 분리도 마찬가지입니다.
Active profiles 값을 환경에 맞게 지정해 주면, 자동으로 인식됩니다.

  • application-local.yml
  • application-dev.yml
  • application-prod.yml

Java 파일에서 설정

Java 파일에서 직접 연결 정보를 설정하는 방법도 있습니다.
하지만 권장하지 않는 방법이라서 생략하도록 하겠습니다.


Property Configuration 활용

다음으로 Property 정보를 Configuration을 활용해서 설정하는 방법입니다.
디비 연결을 자동으로 하지 않고, 하나씩 상세하게 설정하는 방법입니다.

주로 대규모 프로젝트에서 활용되는 방법으로 이유는 여러가지가 있습니다.

  • 패스워드를 비롯한 디비 연결 정보 변환
  • Transaction 설정 및 활용
  • Cache 설정 및 활용
  • 외부 Property 활용
  • Multi-Module 환경
  • 다중 DataSource 연결

Multi-Module 환경에서 다중 DataSource 연결을 해보겠습니다.
여기서는 MariaDB를 기준으로 설정합니다.

application-doamin-local.yml

spring:
  config:
    activate:
      on-profile: "local"
  datasource:
    mariadb:
      driver: org.mariadb.jdbc.Driver
      url: jdbc:mariadb://localhost:3306/devfoxstar
      username: devfoxstar
      password: 1234

먼저 Property 파일을 불러와서 Bean 객체로 등록합니다.
이때 PropertySourcesPlaceholderConfigurer를 활용합니다.

PropertyProvider.kt

package com.devfoxstar.api.domain.configuration.property

import org.springframework.beans.factory.config.YamlPropertiesFactoryBean
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer
import org.springframework.core.io.ClassPathResource

@Configuration
class PropertyProvider {

    @Bean
    @Profile("local")
    fun getLocalProperties() : PropertySourcesPlaceholderConfigurer {
        val configurer = PropertySourcesPlaceholderConfigurer()
        val yaml = YamlPropertiesFactoryBean()

        yaml.setResources(ClassPathResource("application-domain-local.yml"))
        configurer.setProperties(yaml.`object`!!)

        return configurer
    }

}

등록된 Property 정보를 MariaDB 전용으로 설정합니다.
password는 평문으로 쓰긴 했지만, 원래 암호화 한후에 여기에서 복호화를 진행합니다.

MariaDbProperty.kt

package com.devfoxstar.api.domain.configuration.property

import org.apache.logging.log4j.util.Strings
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Configuration

@Configuration
@ConfigurationProperties(prefix = "spring.datasource.mariadb")
class MariaDbProperty {

    var driver: String = Strings.EMPTY
    var url: String = Strings.EMPTY
    var username: String = Strings.EMPTY
    var password: String = Strings.EMPTY

}

설정된 MariaDbProperty 정보로 DataSource 객체를 생성합니다.
기본 설정만 진행했고, 여기에서 상세 설정을 추가하면 됩니다.

MariaDbProvider.kt

package com.devfoxstar.api.domain.configuration.datasource

import com.devfoxstar.api.domain.configuration.property.MariaDbProperty
import com.zaxxer.hikari.HikariDataSource
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.jdbc.DataSourceBuilder
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import javax.sql.DataSource

@Configuration
class MariaDbProvider {

    @Autowired
    lateinit var mariaDbProperty: MariaDbProperty

    @Bean(name = ["mariaDbDataSource"])
    fun mariaDbDataSource() : DataSource {
        return DataSourceBuilder.create()
            .driverClassName(mariaDbProperty.driver)
            .url(mariaDbProperty.url)
            .username(mariaDbProperty.username)
            .password(mariaDbProperty.password)
            .type(HikariDataSource::class.java)
            .build()
    }

}

GitHub - SpringBoot with Kotlin


Tags

#Spring#SpringBoot#DataSource#Property#application.yml

Related Posts

Spring - @Transactional 알아보기
August 19, 2024
1 min
© 2024, All Rights Reserved.

Quick Links

About Me

Media