Поделиться через


Создание консольного приложения Java с помощью Azure DocumentDB

В этом руководстве описано, как разработать консольное приложение Java для подключения к кластеру Azure DocumentDB. В этом руководстве содержатся шаги по настройке среды разработки, аутентификации с помощью azure-identity пакета из пакета Azure SDK для Java и взаимодействии с базой данных и коллекцией для управления документами.

Предпосылки

  • Существующий кластер Azure DocumentDB

Настройка консольного приложения

Затем создайте проект консольного приложения и импортируйте необходимые библиотеки для проверки подлинности в кластере.

  1. Создайте проект Maven с помощью средств командной строки Maven.

    mvn archetype:generate -DgroupId=com.cosmicworks -DartifactId=mongodb-console-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    
  2. Перейдите в каталог проекта.

    cd mongodb-console-app
    
  3. Создайте файл App.java с классом Main в соответствующем каталоге пакетов.

    mkdir -p src/main/java/com/cosmicworks
    touch src/main/java/com/cosmicworks/App.java
    
  4. Добавьте зависимость azure-identity в файл pom.xml.

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.15.4</version>
    </dependency>
    
  5. Добавьте зависимость mongodb-driver-sync в файл pom.xml.

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-sync</artifactId>
        <version>5.4.0</version>
    </dependency>
    

Подключение к кластеру

Теперь используйте библиотеку Azure.Identity, чтобы получить TokenCredential для подключения к вашему кластеру. Официальный драйвер MongoDB имеет специальный интерфейс, который должен быть реализован для получения маркеров из Microsoft Entra для использования при подключении к кластеру.

  1. Начните с импорта необходимых классов в верхней части файла класса Java.

    import java.util.concurrent.TimeUnit;
    
    import org.bson.Document;
    import org.bson.conversions.Bson;
    
    import com.azure.core.credential.TokenCredential;
    import com.azure.core.credential.TokenRequestContext;
    import com.azure.identity.DefaultAzureCredentialBuilder;
    import com.mongodb.MongoClientSettings;
    import com.mongodb.MongoCredential;
    import com.mongodb.MongoCredential.OidcCallbackContext;
    import com.mongodb.MongoCredential.OidcCallbackResult;
    import com.mongodb.client.MongoClient;
    import com.mongodb.client.MongoClients;
    import com.mongodb.client.MongoCollection;
    import com.mongodb.client.MongoDatabase;
    import com.mongodb.client.model.Filters;
    import com.mongodb.client.model.ReplaceOptions;
    import com.mongodb.client.result.UpdateResult;
    
  2. В основном методе создайте экземпляр DefaultAzureCredential и настройте вызов обратного OpenID Connect (OIDC) для получения токенов.

    TokenCredential credential = new DefaultAzureCredentialBuilder().build();
    
    MongoCredential.OidcCallback oidcCallback = new MongoCredential.OidcCallback() {
        @Override
        public OidcCallbackResult onRequest(OidcCallbackContext context) {
            TokenRequestContext tokenRequestContext = new TokenRequestContext()
                    .addScopes("https://ossrdbms-aad.database.windows.net/.default");
            String token = credential.getTokenSync(tokenRequestContext).getToken();
            return new OidcCallbackResult(token);
        }
    };
    
  3. Создайте новый экземпляр MongoCredential, используя вашу ранее определённую функцию обратного вызова.

    MongoCredential mongoCredential = MongoCredential.createOidcCredential(null)
            .withMechanismProperty("OIDC_CALLBACK", oidcCallback);
    
  4. Создайте переменные для имени кластера и всей конечной точки узла.

    String clusterName = "<azure-documentdb-cluster-name>";
    String host = clusterName + ".global.mongocluster.cosmos.azure.com";
    
  5. Создайте экземпляр MongoClientSettings, используя хост, лучшие практики подключения и учетные данные.

    MongoClientSettings settings = MongoClientSettings.builder()
            .applyToClusterSettings(builder -> builder
                    .srvHost(host))
            .applyToSocketSettings(builder -> builder
                    .connectTimeout(2, TimeUnit.MINUTES))
            .applyToSslSettings(builder -> builder
                    .enabled(true))
            .retryWrites(true)
            .credential(mongoCredential)
            .build();
    
  6. Создайте новое MongoClient с помощью сконструированных параметров.

    MongoClient client = MongoClients.create(settings);
    
    System.out.println("Client created");
    

Выполнение распространенных операций

Наконец, используйте официальную библиотеку для выполнения общих задач с базами данных, коллекциями и документами. Здесь вы используете те же классы и методы, которые будут использоваться для взаимодействия с MongoDB или DocumentDB для управления коллекциями и элементами.

  1. Получите ссылки на ваши database и collection.

    MongoDatabase database = client.getDatabase("<database-name>");
    
    System.out.println("Database pointer created");
    
    MongoCollection<Document> collection = database.getCollection("<collection-name>");
    
    System.out.println("Collection pointer created");
    
  2. Представление документов с помощью Product класса.

    public class Product {
        private String _id;
        private String category;
        private String name;
        private int quantity;
        private double price;
        private boolean clearance;
    
        // Getters and setters ommitted for brevity
    }
    
  3. Создайте новый документ, используя collection.replaceOne с включенной функцией upsert.

    Document document = new Document()
            .append("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb")
            .append("category", "gear-surf-surfboards")
            .append("name", "Yamba Surfboard")
            .append("quantity", 12)
            .append("price", 850.00)
            .append("clearance", false);
    
    Bson match = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb");
    
    ReplaceOptions options = new ReplaceOptions().upsert(true);
    UpdateResult result = collection.replaceOne(match, document, options);
    
    System.out.println("Document upserted with _id:\\t" + result.getUpsertedId().asString().getValue());
    
  4. Выполните поиск одного документа с использованием уникального идентификатора collection.find.

    Bson filter = Filters.eq("_id", "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb");
    
    collection.find(filter).forEach(doc -> {
        System.out.println("Read document _id:\\t" + doc.toJson());
    });
    
  5. Выполните общий запрос с помощью двоичного фильтра JSON (BSON).

    Bson query = Filters.eq("category", "gear-surf-surfboards");
    
    collection.find(query).forEach(doc -> {
        System.out.println("Found document:\\t" + doc.toJson());
    });
    
  6. Удаление документов с помощью фильтра и collection.deleteMany.

    Bson filter = Filters.eq("clearance", true);
    collection.deleteMany(filter);