1

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

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

https://quarkus.io/

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

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

4

2 回答 2

2

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

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

于 2019-07-26T09:27:27.630 回答
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 驱动程序。它似乎受到错误的影响:在图像运行时初始化或重新初始化的类的图像堆中不允许有实例:sun.security.provider.NativePRNG #712

此外,Quarkus 依赖分析器似乎在吸收optional依赖,例如com.github.jnr:jnr-unixsocketorg.xerial.snappy:snappy-java.

于 2019-04-05T06:48:42.483 回答