首页 > 解决方案 > 由于接收器类型不匹配,以下候选均不适用:在反应弹簧中

问题描述

我是使用 kotlin 的 springReactive 的新手。我在这个项目中使用 mongoDb,我不知道为什么会出现这个编译时错误

Cannot access class 'com.mongodb.client.MongoCollection'. Check your module classpath for missing or conflicting dependencies
org.springframework.data.mongodb.core.MongoOperations public abstract <T> com.mongodb.client.MongoCollection<org.bson.Document> createCollection(Class<T> entityClass)
                                                                                           @Nullable org.springframework.data.mongodb.core.CollectionOptions collectionOptions

项目.kt

package com.main.productservice.document

import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document

@Document
data class Item(
    @Id
    val id: String? = null,
    val description: String? = null,
    val price: Double? = null
)

ItemCapped.kt

package com.main.productservice.document

import org.springframework.data.annotation.Id
import org.springframework.data.mongodb.core.mapping.Document

@Document
data class ItemCapped(
    @Id
    val id: String? = null,
    val description: String? = null,
    val price: Double? = null,
)

ItemDataIntilizer.kt

package com.main.productservice.Intilize

import com.main.productservice.document.Item
import com.main.productservice.document.ItemCapped
import com.main.productservice.repository.ItemReactiveCappedRepository
import com.main.productservice.repository.ItemReactiveRepository
import lombok.extern.slf4j.Slf4j
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.CommandLineRunner
import org.springframework.context.annotation.Profile
import org.springframework.data.mongodb.core.CollectionOptions
import org.springframework.data.mongodb.core.MongoOperations
import org.springframework.stereotype.Component
import reactor.core.publisher.Flux
import java.time.Duration
import java.util.*
import kotlin.math.log


@Component
@Profile("!test")
@Slf4j
class ItemDataInitializer : CommandLineRunner {
    @Autowired
    private lateinit var itemReactiveRepository: ItemReactiveRepository
    @Autowired
    private lateinit var itemReactiveCappedRepository: ItemReactiveCappedRepository
    @Autowired
    private lateinit var mongoOperations: MongoOperations
    @Throws(Exception::class)
    override fun run(vararg args: String?) {
        initalDataSetUp();
        createCappedCollection();
        dataSetUpforCappedCollection();
    }

    private fun createCappedCollection() {
        mongoOperations.dropCollection(ItemCapped::class.java)
            .then(mongoOperations.createCollection(ItemCapped::class.java,
                CollectionOptions.empty().maxDocuments(20).size(50000).capped()))
    }

    fun data(): MutableIterable<Any> {
        return Arrays.asList(Item(null, "Samsung TV", 399.99),
            Item(null, "LG TV", 329.99),
            Item(null, "Apple Watch", 349.99),
            Item("ABC", "Beats HeadPhones", 149.99))
    }

    fun dataSetUpforCappedCollection() {
        val itemCappedFlux = Flux.interval(Duration.ofSeconds(1))
            .map { i: Long ->
                ItemCapped(null,
                    "Random Item $i",
                    100.00 + i)
            }
        itemReactiveCappedRepository
            .insert(itemCappedFlux)
            .subscribe { itemCapped -> log.info("Inserted Item is $itemCapped") }
    }

    private fun initalDataSetUp() {
        itemReactiveRepository.deleteAll()
            .thenMany(Flux.fromIterable(data()))
            .flatMap(itemReactiveRepository::save)
            .thenMany(itemReactiveRepository.findAll())
            .subscribe { item -> println("Item inserted from CommandLineRunner : $item") }
    }

}

我的 dataIntializer 类中出现确切错误

private fun createCappedCollection() {
        mongoOperations.dropCollection(ItemCapped::class.java)
            .then(mongoOperations.createCollection(ItemCapped::class.java,
                CollectionOptions.empty().maxDocuments(20).size(50000).capped()))
    }

我在这一点上遇到错误

.then(mongoOperations.createCollection(ItemCapped::class.java

标签: mongodbkotlinspring-webflux

解决方案


推荐阅读