Aracılığıyla paylaş


Azure Cosmos DB NoSQL API'siyle verilere erişme

Bu makalede, özel bir uygulamaya Azure Cosmos DB için Spring Data için Spring Cloud Azure Starter nasıl ekleneceği gösterilmektedir. Bu başlangıç, Spring Data ve NoSQL için Azure Cosmos DB kullanarak Azure Cosmos DB veritabanınızda veri depolamanıza ve bu veritabanından veri almanıza olanak tanır. Makale, Azure portalı aracılığıyla Azure Cosmos DB'nin nasıl oluşturulacağını göstererek başlar. Daha sonra makalede Spring Boot Starter ile kullanabileceğiniz özel bir Spring Boot uygulaması oluşturmak için Spring Initializr nasıl kullanılacağı gösterilmektedir.

Azure Cosmos DB, geliştiricilerin SQL, MongoDB, Graph ve Tablo API'leri gibi çeşitli standart API'leri kullanarak verilerle çalışmasına olanak tanıyan genel olarak dağıtılmış bir veritabanı hizmetidir. Microsoft Spring Boot Starter, geliştiricilerin NoSQL için Azure Cosmos DB ile kolayca tümleşen Spring Boot uygulamalarını kullanmasına olanak tanır.

Önkoşullar

Azure portalını kullanarak Azure Cosmos DB oluşturma

Azure Cosmos DB örneği oluşturmak için aşağıdaki adımları kullanın:

  1. azure portal göz atın ve Kaynakoluştur'u seçin.

  2. Seçenek Veritabanlarıve ardından Azure Cosmos DBöğesini seçin.

  3. Azure Cosmos DB hesabı oluştur ekranında, NoSQL için Azure Cosmos DB'yi seçin.

    NoSQL için Azure Cosmos DB seçeneğinin vurgulandığı Azure Cosmos DB hesabı oluştur sayfasını gösteren Azure portalının ekran görüntüsü.

  4. Azure Cosmos DB sayfasında aşağıdaki bilgileri girin:

    • Veritabanınız için kullanmak istediğiniz Aboneliği seçin.
    • Veritabanınız için yeni bir Kaynak grubu mı oluşturulacağını yoksa var olan bir kaynak grubunu mu seçeceğinizi belirtin.
    • veritabanınız için URI olarak kullandığınızbenzersiz bir Hesap Adı girin. Örneğin: contosoaccounttest.
    • Veritabanınız için Konum belirtin.
    • Yalnızca tanıtım amacıyla bir hesap oluşturmak istiyorsanız Ücretsiz Katman İndirimi uygula seçeneğini seçin.
    • Varsayılan seçeneklerin ve ayarların geri kalanını olduğu gibi bırakın.
  5. Gözden geçir + oluştur, belirtimlerinizi gözden geçirin ve Oluşturseçin.

    NoSQL için Azure Cosmos DB ayarlarını içeren Azure Cosmos DB Hesabı Oluştur sayfasını gösteren Azure portalının ekran görüntüsü.

  6. Veritabanınız oluşturulduğunda, Azure Panove Tüm Kaynaklar altında ve Azure Cosmos DB sayfalarını listelenir. Yeni oluşturulan bir Azure Cosmos DB için bir veritabanı ve kapsayıcı oluşturmak üzere, Hızlı Başlangıç: Azure portalından Azure Cosmos DB hesabı, veritabanı, kapsayıcı ve öğeleri oluşturmabölümündeki Veritabanı ve kapsayıcı ekleme kısmına bakın. Önbelleğinizin özellikler sayfasını açmak için bu konumlardan herhangi biri için veritabanınızı seçebilirsiniz.

  7. Veritabanınızın özellikler sayfası görüntülendiğinde, Anahtarlar'ı seçin ve veritabanınızın URI'sini ve erişim anahtarlarını kopyalayın. Spring Boot uygulamanızda bu değerleri kullanırsınız.

    Anahtarlar sayfasının gösterildiği Azure Cosmos DB hesabını gösteren Azure portalının ekran görüntüsü.

Önemli

Yeni oluşturduğunuz Azure Cosmos DB'de, kullanmakta olduğunuz Azure hesabına Owner rolünü atayın. Daha fazla bilgi için bkz. Azure portalını kullanarak Azure rolleri atama.

Spring Initializr ile Spring Boot uygulaması oluşturma

Azure desteğiyle yeni bir Spring Boot uygulama projesi oluşturmak için aşağıdaki adımları kullanın. Alternatif olarak azure-spring-boot-samples deposundaki spring-cloud-azure-data-cosmos-sample örneğini kullanabilirsiniz. Ardından doğrudan Derleme bölümüne atlayabilir ve uygulamanızıtest edebilirsiniz.

  1. https://start.spring.io/adresine gidin.

  2. Aşağıdaki seçenekleri belirtin:

    • Javaile bir Maven projesi oluşturun.
    • Spring Boot sürümünüzü 2.7.11olarak belirtin.
    • Uygulamanız için Grup ve Yapıt adlarını belirtin.
    • Java sürümü için 17 seçin.
    • Bağımlılıklara Azure Desteği ekleyin.

    Not

    Spring Initializr, paket adını oluşturmak için Grubu ve Yapıt adlarını kullanır; örneğin: com.example.wingtiptoysdata.

    Spring Boot sürümü, Azure Desteği tarafından desteklenen sürümden daha yüksek olabilir. Proje otomatik olarak oluşturulduktan sonra Spring Boot sürümünü, Spring-Versions-Mappingiçinde bulabileceğiniz Azure tarafından desteklenen en yüksek sürüme el ile değiştirebilirsiniz.

  3. Daha önce listelenen seçenekleri belirttikten sonra GENERATEöğesini seçin.

  4. İstendiğinde, projeyi yerel bilgisayarınızdaki belirttiğiniz bir konuma indirin ve dosyaları ayıklayın.

Basit Spring Boot uygulamanız artık düzenleme için hazır.

Spring Boot uygulamanızı Azure Spring Boot Starter'ı kullanacak şekilde yapılandırma

  1. Uygulamanızın dizininde pom.xml dosyasını bulun; mesela:

    C:\SpringBoot\wingtiptoysdata\pom.xml

    -veya-

    /users/example/home/wingtiptoysdata/pom.xml

  2. pom.xml dosyasını bir metin düzenleyicisinde açın ve <dependencies> öğesine aşağıdakileri ekleyin:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-data-cosmos</artifactId>
    </dependency>
    

    Not

    Spring Cloud Azure kitaplık sürümlerini bir ürün reçetesi (BOM) kullanarak yönetme hakkında daha fazla bilgi içinSpring Cloud Azure geliştirici kılavuzunun Başlarken bölümüne bakın.

  3. pom.xml dosyasını kaydedin ve kapatın.

Spring Boot uygulamanızı Azure Cosmos DB'nizi kullanacak şekilde yapılandırma

  1. uygulamanızın kaynakları dizininde application.properties dosyasını bulun; mesela:

    C:\SpringBoot\wingtiptoysdata\src\main\resources\application.properties

    -veya-

    /users/example/home/wingtiptoysdata/src/main/resources/application.properties

  2. application.properties dosyasını bir metin düzenleyicisinde açın ve dosyaya aşağıdaki satırları ekleyin ve örnek değerleri veritabanınız için uygun özelliklerle değiştirin:

    # Specify the DNS URI of your Azure Cosmos DB.
    spring.cloud.azure.cosmos.endpoint=https://contosoaccounttest.documents.azure.com:443/
    spring.cloud.azure.cosmos.key=your-cosmosdb-account-key
    
    # Specify the name of your database.
    spring.cloud.azure.cosmos.database=contosoaccounttest
    spring.cloud.azure.cosmos.populate-query-metrics=true
    
  3. application.properties dosyasını kaydedin ve kapatın.

Temel veritabanı işlevselliğini uygulamak için örnek kod ekleme

Bu bölümde, kullanıcı verilerini depolamak için iki Java sınıfı oluşturacaksınız. Ardından, User sınıfının bir örneğini oluşturmak ve veritabanınıza kaydetmek için ana uygulama sınıfınızı değiştirirsiniz.

Kullanıcı verilerini depolamak için temel sınıf tanımlama

  1. Ana uygulama Java dosyanızla aynı dizinde User.java adlı yeni bir dosya oluşturun.

  2. User.java dosyasını bir metin düzenleyicisinde açın ve veritabanınızda değerleri depolayan ve alan genel bir kullanıcı sınıfı tanımlamak için dosyaya aşağıdaki satırları ekleyin:

    package com.example.wingtiptoysdata;
    
    import com.azure.spring.data.cosmos.core.mapping.Container;
    import com.azure.spring.data.cosmos.core.mapping.PartitionKey;
    import org.springframework.data.annotation.Id;
    
    @Container(containerName = "mycollection")
    public class User {
        @Id
        private String id;
        private String firstName;
        @PartitionKey
        private String lastName;
        private String address;
    
        public User() {
    
        }
    
        public User(String id, String firstName, String lastName, String address) {
            this.id = id;
            this.firstName = firstName;
            this.lastName = lastName;
            this.address = address;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return String.format("%s %s, %s", firstName, lastName, address);
        }
    }
    
  3. User.java dosyasını kaydedin ve kapatın.

Veri deposu arabirimi tanımlama

  1. Ana uygulama Java dosyanızla aynı dizinde UserRepository.java adlı yeni bir dosya oluşturun.

  2. UserRepository.java dosyasını bir metin düzenleyicisinde açın ve dosyaya aşağıdaki satırları ekleyerek varsayılan ReactiveCosmosRepository arabirimini genişleten bir kullanıcı deposu arabirimi tanımlayın:

    package com.example.wingtiptoysdata;
    
    import com.azure.spring.data.cosmos.repository.ReactiveCosmosRepository;
    import org.springframework.stereotype.Repository;
    import reactor.core.publisher.Flux;
    
    @Repository
    public interface UserRepository extends ReactiveCosmosRepository<User, String> {
        Flux<User> findByFirstName(String firstName);
    }
    

    ReactiveCosmosRepository arabirimi, başlatıcının önceki sürümündeki DocumentDbRepository arabiriminin yerini alır. Yeni arabirim, temel kaydetme, silme ve bulma işlemleri için zaman uyumlu ve reaktif API'ler sağlar.

  3. UserRepository.java dosyasını kaydedin ve kapatın.

Ana uygulama sınıfını değiştirme

  1. Uygulamanızın paket dizininde ana uygulama Java dosyasını bulun, örneğin:

    C:\SpringBoot\wingtiptoysdata\src\main\java\com\example\wingtiptoysdata\WingtiptoysdataApplication.java

    -veya-

    /users/example/home/wingtiptoysdata/src/main/java/com/example/wingtiptoysdata/WingtiptoysdataApplication.java

  2. Ana uygulama Java dosyasını bir metin düzenleyicisinde açın ve dosyaya aşağıdaki satırları ekleyin:

    package com.example.wingtiptoysdata;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.CommandLineRunner;
    import org.springframework.util.Assert;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Mono;
    
    import java.util.Optional;
    
    @SpringBootApplication
    public class WingtiptoysdataApplication implements CommandLineRunner {
    
        private static final Logger LOGGER = LoggerFactory.getLogger(WingtiptoysdataApplication.class);
    
        @Autowired
        private UserRepository repository;
    
        public static void main(String[] args) {
            SpringApplication.run(WingtiptoysdataApplication.class, args);
        }
    
        public void run(String... var1) {
            this.repository.deleteAll().block();
            LOGGER.info("Deleted all data in container.");
    
            final User testUser = new User("testId", "testFirstName", "testLastName", "test address line one");
    
            // Save the User class to Azure Cosmos DB database.
            final Mono<User> saveUserMono = repository.save(testUser);
    
            final Flux<User> firstNameUserFlux = repository.findByFirstName("testFirstName");
    
            //  Nothing happens until we subscribe to these Monos.
            //  findById won't return the user as user isn't present.
            final Mono<User> findByIdMono = repository.findById(testUser.getId());
            final User findByIdUser = findByIdMono.block();
            Assert.isNull(findByIdUser, "User must be null");
    
            final User savedUser = saveUserMono.block();
            Assert.state(savedUser != null, "Saved user must not be null");
            Assert.state(savedUser.getFirstName().equals(testUser.getFirstName()), "Saved user first name doesn't match");
    
            firstNameUserFlux.collectList().block();
    
            final Optional<User> optionalUserResult = repository.findById(testUser.getId()).blockOptional();
            Assert.isTrue(optionalUserResult.isPresent(), "Cannot find user.");
    
            final User result = optionalUserResult.get();
            Assert.state(result.getFirstName().equals(testUser.getFirstName()), "query result firstName doesn't match!");
            Assert.state(result.getLastName().equals(testUser.getLastName()), "query result lastName doesn't match!");
    
            LOGGER.info("findOne in User collection get result: {}", result.toString());
        }
    }
    
  3. Ana uygulama Java dosyasını kaydedin ve kapatın.

Uygulamanızı derleme ve test etme

  1. Bir komut istemi açın ve pom.xml dosyanızın bulunduğu klasöre gidin; mesela:

    cd C:\SpringBoot\wingtiptoysdata

    -veya-

    cd /users/example/home/wingtiptoysdata

  2. Uygulamanızı derlemek ve çalıştırmak için aşağıdaki komutu kullanın:

    ./mvnw clean
    

    Bu komut, uygulamayı test aşamasının bir parçası olarak otomatik olarak çalıştırır. Ayrıca şunları da kullanabilirsiniz:

    ./mvnw spring-boot:run
    

    Bazı derleme ve test çıktılarının ardından konsol pencereniz aşağıdaki örneğe benzer bir ileti görüntüler:

    INFO 1365 --- [           main] c.e.w.WingtiptoysdataApplication         : Deleted all data in container.
    
    ... (omitting connection and diagnostics output) ...
    
    INFO 1365 --- [           main] c.e.w.WingtiptoysdataApplication         : findOne in User collection get result: testFirstName testLastName, test address line one
    

    Bu çıkış iletileri, verilerin Azure Cosmos DB'ye başarıyla kaydedildiğini ve ardından yeniden alındığını gösterir.

Kaynakları temizleme

Bu uygulamayı kullanmaya devam etmeyecekseniz, daha önce oluşturduğunuz Azure Cosmos DB'yi içeren kaynak grubunu sildiğinizden emin olun. Kaynak grubunu Azure portalından silebilirsiniz.

Sonraki adımlar

Spring ve Azure hakkında daha fazla bilgi edinmek için Azure'da Spring belge merkezine geçin.

Diğer kaynaklar

Azure Cosmos DB ve Java kullanma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:

Azure'da Spring Boot uygulamalarını kullanma hakkında daha fazla bilgi için aşağıdaki makalelere bakın:

Azure'ı Java ile kullanma hakkında daha fazla bilgi için bkz. Java Geliştiricileri için Azure ve Azure DevOps ve Java ile Çalışma.

Spring Framework, Java geliştiricilerinin kurumsal düzeyde uygulamalar oluşturmalarına yardımcı olan açık kaynaklı bir çözümdür. Bu platformun üzerinde oluşturulan en popüler projelerden biri, tek başına Java uygulamaları oluşturmak için basitleştirilmiş bir yaklaşım sağlayan Spring Boot'dur. Geliştiricilerin Spring Boot'ı kullanmaya başlamasına yardımcı olmak için https://github.com/spring-guides/adresinde çeşitli örnek Spring Boot paketleri mevcuttur. temel Spring Boot projeleri listesinden seçim yapmaya ek olarak, Spring Initializr geliştiricilerin özel Spring Boot uygulamaları oluşturmaya başlamasına yardımcı olur.