我正在使用 quarkus 构建一个需要连接到 MongoDB 的应用程序。
但是查看文档我找不到任何模块或指南来告诉我如何做到这一点:
有关于 hibernate 和 JPA 的指南,但没有关于 mongodb 的指南。
有人能做到吗?您可以与我分享一个带有示例的存储库吗?
我正在使用 quarkus 构建一个需要连接到 MongoDB 的应用程序。
但是查看文档我找不到任何模块或指南来告诉我如何做到这一点:
有关于 hibernate 和 JPA 的指南,但没有关于 mongodb 的指南。
有人能做到吗?您可以与我分享一个带有示例的存储库吗?
最新版本的 Quarkus 添加了 MongoDB 支持。
我在一些 quarkus 演示代码中使用以下内容访问 mongodb 数据库:
@ApplicationScoped
public class MongoClientFactory {
@Inject
private Logger logger;
@Inject
@ConfigProperty(name="mongo.user")
private String mongoUser;
@Inject
@ConfigProperty(name="mongo.password")
private String mongoPassword;
@Inject
@ConfigProperty(name="mongo.host")
private String mongoHost;
@Inject
@ConfigProperty(name="mongo.port", defaultValue="27017")
private int mongoPort;
@Inject
@ConfigProperty(defaultValue="admin")
private String mongoAdminDb;
private MongoClient mongoClient;
private ServerAddress serverAddress;
private MongoCredential mongoCredential;
@PostConstruct
void buildMongoClient() {
logger.info("Building MongoClientFactory");
serverAddress = new ServerAddress(mongoHost, mongoPort);
mongoCredential = MongoCredential.createCredential(mongoUser, mongoAdminDb, mongoPassword.toCharArray());
}
@Produces
public MongoClient produceMongoClient() {
if (mongoClient == null) {
mongoClient = new MongoClient(serverAddress, mongoCredential, MongoClientOptions.builder().build());
logger.info("Connected to MongoDB server on {}:{}", mongoHost, mongoPort);
}
return mongoClient;
}
@PreDestroy
void cleanup() {
if (mongoClient != null) {
mongoClient.close();
}
}
}
然后我可以在需要的地方注入客户端:
public class SomBusinessObject {
@Inject
private MongoClient mongoClient;
...
}
Mongo 驱动程序也被添加到 pom 中:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.8.2</version>
</dependency>
我还没有用原生版本测试过这个。独立的 jar 似乎运行良好。
更新
GraalVM 版本 1.0.0-rc15 CE 不喜欢 mongo 驱动程序。它似乎受到错误的影响:在图像运行时初始化或重新初始化的类的图像堆中不允许有实例:sun.security.provider.NativePRNG #712。
此外,Quarkus 依赖分析器似乎在吸收optional
依赖,例如com.github.jnr:jnr-unixsocket
和org.xerial.snappy:snappy-java
.