티스토리 뷰
반응형
Reative Repository를 만들어서 MongoDB 컬렉션에 데이터를 추가하거나 수정하겠습니다.
Data Class 생성
아래는 기본 data class의 구조입니다.
data class Customer(
val id: Int = 0,
val name: String = "",
val telephone: Telephone? = null
)
data class Telephone(
val countryCode: String = "",
val telephoneNumber: String = ""
)
MongoDB에서 사용하려면 아래와 같이 수정해야 합니다.
@Document("Customers")
data class Customer(
val id: Int = 0,
val name: String = "",
val telephone: Telephone? = null
)
data class Telephone(
val countryCode: String = "",
val telephoneNumber: String = ""
)
Repository 생성
Repository 인터페이스를 생성하였습니다.
interface CustomerRepository : ReactiveCrudRepository<Customer, Int>
Customer를 사용하여 데이터를 저장하고 고객을 조회하기 위해서는 id가 필요하기 때문에 id의 자료형인 Int를 지정하였습니다.
DatabaseInitializer를 아래와 같이 수정하였습니다.
@Component
class DatabaseInitializer(private val customerRepository: CustomerRepository) {
companion object {
val initialCustomers = listOf(
Customer(1, "ImLeaf"),
Customer(2, "Leaf"),
Customer(3, "ImTae", Telephone("+82", "12341234"))
)
}
@PostConstruct
fun initCustomers() {
customerRepository.saveAll(initialCustomers).subscribe{
println("기본 Customers 생성 완료")
}
}
}
그리고 실행을 하면 아래와 같이 DB에 데이터가 들어간 것을 확인할 수 있습니다.
Reative Mongo Template 사용
데이터베이스에 CRUD 작업을 하기 위해서 ReactiveCrudRepository를 사용했지만 Mono나 Flux 같은 Reactive 타입으로 작업을 해야 되기 때문에 ReactiveMongoTemplate를 사용해야 합니다.
CustomerRepository에 @Repository 어노테이션을 추가합니다.
Repository 어노테이션을 추가한 클래스는 생성자에서 reactive 작업을 수행하는데 사용할 수 있는 ReactiveMongoTemplate 객체를 수신할 수 있습니다.
DatabaseInitializer 클래스를 삭제하고 아래와 같이 CustomerRepository를 수정합니다.
@Repository
class CustomerRepository (private val template: ReactiveMongoTemplate) {
companion object {
val initialCustomers = listOf(
Customer(1, "ImLeaf"),
Customer(2, "Leaf"),
Customer(3, "ImTae", Telephone("+82", "12341234"))
)
}
@PostConstruct
fun initialRepository() = initialCustomers.map(Customer::toMono).map(this::create).map(Mono<Customer>::subscribe)
fun create(customer: Mono<Customer>) = template.save(customer)
}
반응형
'알려주는 이야기 > 스프링 부트' 카테고리의 다른 글
Spring Boot - MongoDB [ CRUD를 위한 RESTful API ] (0) | 2020.09.16 |
---|---|
Spring Boot - MongoDB [ 프로젝트 세팅 ] (0) | 2020.09.16 |
Spring Boot - MongoDB [ 설치 및 사용 방법 ] (0) | 2020.09.16 |
Spring Boot - Reative Rest Api [ 오류 처리 ] (0) | 2020.09.09 |
Spring Boot - Reative Rest Api [ 함수형 ] (0) | 2020.09.09 |
댓글