Quarkus mongodb 集成
Quarkus mongodb integration
我正在使用 quarkus 构建需要连接到 MongoDB 的应用程序。
但是在查看文档时我找不到任何模块或指南来告诉我如何做:
有关于 hibernate 和 JPA 的指南,但没有关于 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 驱动程序。它似乎受到 Error: No instances are allowed in the image heap for a class that is initialized or reinitialzied at image runtime: sun.security.provider.NativePRNG #712.
的影响
此外,Quarkus 依赖分析器似乎正在吸收 optional
依赖,例如 com.github.jnr:jnr-unixsocket
和 org.xerial.snappy:snappy-java
。
最新版本的 Quarkus 添加了 MongoDB 支持。
我正在使用 quarkus 构建需要连接到 MongoDB 的应用程序。
但是在查看文档时我找不到任何模块或指南来告诉我如何做:
有关于 hibernate 和 JPA 的指南,但没有关于 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 驱动程序。它似乎受到 Error: No instances are allowed in the image heap for a class that is initialized or reinitialzied at image runtime: sun.security.provider.NativePRNG #712.
的影响此外,Quarkus 依赖分析器似乎正在吸收 optional
依赖,例如 com.github.jnr:jnr-unixsocket
和 org.xerial.snappy:snappy-java
。
最新版本的 Quarkus 添加了 MongoDB 支持。