类型 MongoClient 和限定符 [@Default] 的依赖关系不满足

问题描述 投票:0回答:1

我已经在这个问题上苦苦挣扎了两天了。我不明白为什么 CDI 无法在我的代码中注入 MongoClient:

package edu.kmaooad.capstone23.relations.dal;

import com.mongodb.client.model.Filters;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoCollection;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.bson.types.ObjectId;
import org.eclipse.microprofile.config.inject.ConfigProperty;

import java.util.Optional;

@ApplicationScoped
public class RelationRepository {
    @Inject
    MongoClient mongoClient;

    @ConfigProperty(name = "quarkus.mongodb.database")
    String databaseName;

    // TODO handle the result of insertOne
    public Optional<Relation> createRelation(String collectionName1, String collectionName2, Relation relation) {
        var collection = getRelationCollection(collectionName1, collectionName2);
        collection.insertOne(relation);
        return Optional.of(relation);
    }

    // TODO handle the result of deleteOne
    public boolean deleteRelation(String collectionName1, String collectionName2, ObjectId id) {
        var collection = getRelationCollection(collectionName1, collectionName2);
        collection.deleteOne(Filters.eq("_id", id));
        return true;
    }

    private MongoCollection<Relation> getRelationCollection(String collectionName1, String collectionName2) {
        var collectionName = getRelationCollectionName(collectionName1, collectionName2);
        var database = mongoClient.getDatabase(databaseName);
        return database.getCollection(collectionName, Relation.class);
    }

    private String getRelationCollectionName(String collectionName1, String collectionName2) {
        return collectionName1 + "-to-" + collectionName2;
    }
}

我使用过 PanacheMongoRepository,它运行得非常好。 Quarkus 通过

QUARKUS_MONGODB_CONNECTION_STRING
env 访问数据库。变量。

当我使用 MongoClient 运行项目时,以下错误被删除:

Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors   
        [error]: Build step io.quarkus.arc.deployment.ArcProcessor#validate threw an exception: jakarta.enterprise.inject.spi.DeploymentException: jakarta.enterprise.inject.UnsatisfiedResolutionException: U
nsatisfied dependency for type com.mongodb.reactivestreams.client.MongoClient and qualifiers [@Default]
        - java member: edu.kmaooad.capstone23.relations.dal.RelationRepository#mongoClient
        - declared on CLASS bean [types=[edu.kmaooad.capstone23.relations.dal.RelationRepository, java.lang.Object], qualifiers=[@Default, @Any], target=edu.kmaooad.capstone23.relations.dal.RelationReposito
ry]
        at io.quarkus.arc.processor.BeanDeployment.processErrors(BeanDeployment.java:1447)
        at io.quarkus.arc.processor.BeanDeployment.init(BeanDeployment.java:311)
        at io.quarkus.arc.processor.BeanProcessor.initialize(BeanProcessor.java:158)
        at io.quarkus.arc.deployment.ArcProcessor.validate(ArcProcessor.java:469)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
        at java.base/java.lang.reflect.Method.invoke(Method.java:578)
        at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
        at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
        at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
        at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
        at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
        at java.base/java.lang.Thread.run(Thread.java:1623)
        at org.jboss.threads.JBossThread.run(JBossThread.java:501)
quarkus cdi
1个回答
0
投票

我在开发扩展时遇到了同样的问题

这是 git https://github.com/dcdh/quarkus-togglz/tree/mongo

分支蒙戈

除 mongo 集成测试外,所有测试均通过。

(我无法回复你的评论:声誉不够)

© www.soinside.com 2019 - 2024. All rights reserved.