Quarkus mongodb 集成

Quarkus mongodb integration

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

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

https://quarkus.io/

有关于 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-unixsocketorg.xerial.snappy:snappy-java

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

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