我已经在这个问题上苦苦挣扎了两天了。我不明白为什么 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)
我在开发扩展时遇到了同样的问题
这是 git https://github.com/dcdh/quarkus-togglz/tree/mongo
分支蒙戈
除 mongo 集成测试外,所有测试均通过。
(我无法回复你的评论:声誉不够)