Интеграция Quarkus mongodb

#java #mongodb #quarkus

#java #mongodb #quarkus

Вопрос:

Я использую quarkus для создания приложения, которому необходимо подключиться к MongoDB.

Однако, просматривая документацию, я не смог найти ни одного модуля или руководства, которые показали бы мне, как я могу это сделать:

https://quarkus.io/

Есть руководство по hibernate и JPA, но ничего о mongodb.

Кому-нибудь удается это сделать? Можете ли вы поделиться со мной репозиторием с примером?

Комментарии:

1. В настоящее время нет поддержки MongoDB, но я думаю, что есть планы добавить ее в будущем. Поддержка чего-либо в Quarkus означает, что предпринимаются шаги для обеспечения того, чтобы это работало и в собственном режиме, вот почему вы не видите поддержки для «всего мира»

Ответ №1:

В последних версиях Quarkus добавлена поддержка MongoDB.

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

Ответ №2:

Я использовал следующее для доступа к базам данных mongodb в некотором демонстрационном коде quarkus:

 @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 .

Комментарии:

1. Неплохое решение, но как насчет биений сердца и поведения повторного подключения. @micronautfw решает эти задачи за вас.

2. Текущие версии драйвера MongoDB Java реализуют настраиваемые частоты сердечных сокращений и объединение пулов соединений. Мой код немного устарел, поскольку на момент написания мне приходилось поддерживать более старые версии серверов Mongo. MongoClientFactory Реализация заключалась в основном в предоставлении конфигурации. Это было для POC, поэтому оно не включает в себя все настраиваемое поведение, предоставляемое драйвером Java.

Ответ №3:

Вот руководство по MongoDB

https://quarkus.io/guides/mongodb

Вы также можете использовать Panache

https://quarkus.io/guides/mongodb-panache