SpringBoot에서 디비를 연결하기 위해 DataSource Property를 설정합니다.
디비를 연결하는 방법은 몇 가지가 있습니다.
SpringBoot 프로젝트에서 기본 Property 설정 파일은 두 개가 있습니다.
application.properties
와 application.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 값을 환경에 맞게 지정해 주면, 자동으로 인식됩니다.
Java 파일에서 직접 연결 정보를 설정하는 방법도 있습니다.
하지만 권장하지 않는 방법이라서 생략하도록 하겠습니다.
다음으로 Property 정보를 Configuration을 활용해서 설정하는 방법입니다.
디비 연결을 자동으로 하지 않고, 하나씩 상세하게 설정하는 방법입니다.
주로 대규모 프로젝트에서 활용되는 방법으로 이유는 여러가지가 있습니다.
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() } }