【问题标题】:Quarkus mongodb integrationQuarkus MongoDB 集成
【发布时间】:2019-08-18 15:13:44
【问题描述】:

我正在使用 quarkus 构建一个需要连接到 MongoDB 的应用程序。

但是查看文档我找不到任何模块或指南来告诉我如何做到这一点:

https://quarkus.io/

有关于 hibernate 和 JPA 的指南,但没有关于 mongodb 的指南。

有人能做到吗?你能与我分享一个带有示例的存储库吗?

【问题讨论】:

  • 目前尚不支持 MongoDB,但我认为有计划将其添加。在 Quarkus 中支持某些东西意味着要采取措施确保它也能在原生模式下工作,这就是为什么你看不到对“整个世界”的支持

标签: java mongodb quarkus


【解决方案1】:

我在一些 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-unixsocketorg.xerial.snappy:snappy-java

【讨论】:

  • 不错的解决方案,但是心跳和重新连接行为呢。 @micronautfw 为您处理这些事情。
  • 当前版本的 MongoDB java 驱动程序实现了可定制的心跳和连接池。我的代码有点旧,因为我在最初编写它时必须支持旧版本的 Mongo 服务器。 MongoClientFactory 实现基本上是关于公开配置。它适用于 POC,因此它不包括 java 驱动程序提供的所有可定制行为。
【解决方案2】:

最新版本的 Quarkus 增加了对 MongoDB 的支持。

https://quarkus.io/guides/mongo-guide

【讨论】:

    猜你喜欢
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多