본문 바로가기
Java & Kotlin/Spring

Start Spring Data MongoDB - 3. Spring Data MongoDB 설정

by devson 2021. 8. 30.

앞서 포스팅을 통해 MongoDB instance를 실행시키고 Transaction을 위한 Replica Set 설정을 마쳤다면,

이제 Spring Boot application과 MongoDB를 연동하기 위해 필요한 설정을 진행하도록 해보자.

 

(관련 코드는 여기에서 확인 가능하다)

 


application.yml

먼저 application.yml 설정을 하자.

MongoDB에 접속할 수 있는 MongoDB instance 정보와 접속 설정을 위한 spring.data.mongodb.uri

Spring Data MongoDB의 debug log를 확인하기 위한 logging.level 설정을 추가한다.

 

spring:
  data:
    mongodb:
      uri: mongodb://127.0.0.1:27017/playground?replicaSet=rs&readPreference=secondaryPreferred&minpoolsize=5&maxpoolsize=5

logging:
  level:
    org.springframework.data.mongodb: DEBUG

 

참고로 MongoDB 설정 관련 uri에 대한 자세한 정보는 com.mongodb.ConnectionString클래스를 살펴보는 것을 추천한다.

 

MongoDbConfiguration

다음은 코드를 통해 설정을 해보자.

커넥션 관련된 거의 모든 설정은 application.ymlspring.data.mongodb.uri에 포함되고

Spring Data MongoDB 내부적으로 처리해주기 때문에 매우 간단하다.

 

import org.springframework.boot.autoconfigure.mongo.MongoProperties
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.mongodb.MongoDatabaseFactory
import org.springframework.data.mongodb.MongoTransactionManager
import org.springframework.data.mongodb.config.EnableMongoAuditing
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory

@Configuration
@EnableMongoAuditing
class MongoDbConfiguration {
    @Bean
    @ConfigurationProperties("spring.data.mongodb")
    fun properties(): MongoProperties {
        return MongoProperties()
    }

    @Bean
    fun mongoClientDatabaseFactory(properties: MongoProperties): SimpleMongoClientDatabaseFactory {
        return SimpleMongoClientDatabaseFactory(properties.uri)
    }

    @Bean
    fun transactionManager(databaseFactory: MongoDatabaseFactory): MongoTransactionManager {
        return MongoTransactionManager(databaseFactory)
    }
}

 

여기서 중요한 것은 MongoTransactionManager 인데 따로 MongoTransactionManager를 Bean으로 등록하지 않으면 @Transactional을 통한 transaction이 적용되지 않는다.

(Reactive Mongo 설정은 여기를 참고)

 

Application 실행

위와 같이 설정한 후 Spring Boot Application을 실행하면 아래와 같이 MongoDB와 연동이 잘 되는 것을 확인할 수 있다.

 

댓글