PostgreSQL için Azure Veri Tabanı ile Spring Data JPA kullanma

Bu öğreticide, Spring Data JPA kullanılarak verilerin PostgreSQL için Azure Veri Tabanı içinde nasıl depoladığı gösterilmektedir.

Java Kalıcılık API'si (JPA) nesne-ilişkisel eşleme için standart Java API'dir.

Bu öğreticide iki kimlik doğrulama yöntemi ekleyeceğiz: Microsoft Entra kimlik doğrulaması ve PostgreSQL kimlik doğrulaması. Passwordless sekmesi Microsoft Entra kimlik doğrulamasını, Password sekmesinde ise PostgreSQL kimlik doğrulaması gösterilir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra ID tanımlanan kimlikleri kullanarak PostgreSQL için Azure Veri Tabanı bağlanma mekanizmasıdır. Microsoft Entra kimlik doğrulamasıyla, veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilirsiniz ve bu da izin yönetimini basitleştirir.

PostgreSQL kimlik doğrulaması PostgreSQL'de depolanan hesapları kullanır. Hesapların kimlik bilgileri olarak parolaları kullanmayı seçerseniz, bu kimlik bilgileri user tablosunda depolanır. Bu parolalar PostgreSQL'de depolandığından, parolaların döndürmesini kendiniz yönetmeniz gerekir.

Önkoşullar

  • PostgreSQL komut satırı istemcisi.

  • Spring Boot uygulamanız yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Project ve Dependencies altında, Spring Web, Spring Data JDBC ve PostgreSQL Driver bağımlılıklarını ekleyin ve ardından Java sürüm 8 veya üzerini seçin.

Önemli

Parolasız bağlantıları kullanmak için PostgreSQL için Azure Veri Tabanı Esnek Sunucu örneğinin Microsoft Entra yönetici kullanıcısını yapılandırın. Daha fazla bilgi için bkz. PostgreSQL için Azure Veri Tabanı Esnek Sunucuda Microsoft Entra rollerini yönetme.

Örnek uygulamaya bakın

Bu öğreticide örnek bir uygulama kodlayacaksınız. Daha hızlı gitmek istiyorsanız, bu uygulama zaten kodlanmış ve https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql konumunda kullanılabilir.

PostgreSQL sunucunuz için güvenlik duvarı kuralı yapılandırma

PostgreSQL için Azure Veri Tabanı örnekleri varsayılan olarak güvenlidir. Gelen bağlantılara izin vermeyen bir güvenlik duvarı vardır.

Veritabanınızı kullanabilmek için sunucunun güvenlik duvarını açarak yerel IP adresinin veritabanı sunucusuna erişmesine izin verin. Daha fazla bilgi için bkz. PostgreSQL için Azure Veri Tabanı - Esnek Sunucu'daki Güvenlik Duvarı kuralları.

PostgreSQL sunucunuza Windows bir bilgisayardaki Linux için Windows Alt Sistemi (WSL) üzerinden bağlanıyorsanız WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.

PostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme

Ardından, yönetici olmayan bir kullanıcı oluşturun ve veritabanına tüm izinleri verin.

Parolasız bağlantı kullanan yönetici olmayan bir kullanıcı oluşturmak için aşağıdaki yöntemi kullanabilirsiniz.

  1. Azure CLI için Service Connector parolasız uzantıyı yüklemek için aşağıdaki komutu kullanın:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Yönetici olmayan Microsoft Entra kullanıcı oluşturmak için aşağıdaki komutu kullanın:

      az connection create postgres-flexible \
           --resource-group <your_resource_group_name> \
           --connection postgres_conn \
           --target-resource-group <your_resource_group_name> \
           --server postgresqlflexibletest \
           --database demo \
           --user-account \
           --query authInfo.userName \
           --output tsv
    

    Komut tamamlandığında konsol çıkışındaki kullanıcı adını not alın.

PostgreSQL için Azure Veri Tabanı verilerini depolama

Artık PostgreSQL için Azure Veri Tabanı Esnek Sunucu örneğiniz olduğuna göre Spring Cloud Azure kullanarak verileri depolayabilirsiniz.

Spring Cloud Azure Starter JDBC PostgreSQL modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:

  • Spring Cloud Azure Ürün Reçetesi( BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Bir Not

    Spring Boot 4.0.x kullanıyorsanız, sürümünü olarak 7.4.0ayarlayınspring-cloud-azure-dependencies.

    Spring Boot 3.5.x kullanıyorsanız, sürümünü olarak 6.5.0ayarlayınspring-cloud-azure-dependencies.

    Spring Boot 3.1.x-3.5.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.25.0 olarak ayarladığınızdan emin olun.

    Eğer Spring Boot 2.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 4.20.0 olarak ayarladığınızdan emin olun.

    Bu Parça Listesi (BOM), <dependencyManagement> bölümünde pom.xml dosyanızda yapılandırılmalıdır. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar.

    Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter JDBC PostgreSQL bileşeni:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
    </dependency>
    

Bir Not

Sürümünden 4.5.0bu yana parolasız bağlantılar desteklenmektedir.

Spring Boot'ı PostgreSQL için Azure Veri Tabanı kullanacak şekilde yapılandırma

Spring Data JPA kullanarak PostgreSQL için Azure Veri Tabanı verilerini depolamak için uygulamayı yapılandırmak için şu adımları izleyin:

  1. application.properties yapılandırma dosyanıza aşağıdaki özellikleri ekleyerek PostgreSQL için Azure Veri Tabanı kimlik bilgilerini yapılandırın.

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require
    spring.datasource.username=<your_postgresql_ad_non_admin_username>
    spring.datasource.azure.passwordless-enabled=true
    
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    

Önemli

Parolasız bağlantıları kullanmak için PostgreSQL için Azure Veri Tabanı Tek Sunucu örneğinin Microsoft Entra yönetici kullanıcısını yapılandırın. Daha fazla bilgi için bkz. PostgreSQL ile kimlik doğrulaması için Microsoft Entra ID kullanma.

Örnek uygulamaya bakın

Bu makalede örnek bir uygulama kodlayacaksınız. Daha hızlı gitmek istiyorsanız, bu uygulama zaten kodlanmış ve https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql konumunda kullanılabilir.

PostgreSQL sunucunuz için güvenlik duvarı kuralı yapılandırma

PostgreSQL için Azure Veri Tabanı örnekleri varsayılan olarak güvenlidir. Gelen bağlantılara izin vermeyen bir güvenlik duvarı vardır.

Veritabanınızı kullanabilmek için sunucunun güvenlik duvarını açarak yerel IP adresinin veritabanı sunucusuna erişmesine izin verin. Daha fazla bilgi için bkz. Azure portalını kullanarak PostgreSQL için Azure Veri Tabanı - Tek Sunucu için güvenlik duvarı kuralları oluşturma ve yönetme.

PostgreSQL sunucunuza Windows bir bilgisayardaki Linux için Windows Alt Sistemi (WSL) üzerinden bağlanıyorsanız WSL ana bilgisayar kimliğini güvenlik duvarınıza eklemeniz gerekir.

PostgreSQL yönetici olmayan kullanıcı oluşturma ve izin verme

Ardından, yönetici olmayan bir kullanıcı oluşturun ve veritabanına tüm izinleri verin.

Parolasız bağlantı kullanan yönetici olmayan bir kullanıcı oluşturmak için aşağıdaki yöntemi kullanabilirsiniz.

  1. Azure CLI için Service Connector parolasız uzantıyı yüklemek için aşağıdaki komutu kullanın:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Yönetici olmayan Microsoft Entra kullanıcı oluşturmak için aşağıdaki komutu kullanın:

      az connection create postgres \
           --resource-group <your_resource_group_name> \
           --connection postgres_conn \
           --target-resource-group <your_resource_group_name> \
           --server postgresqlsingletest \
           --database demo \
           --user-account \
           --query authInfo.userName \
           --output tsv
    

    Komut tamamlandığında konsol çıkışındaki kullanıcı adını not alın.

PostgreSQL için Azure Veri Tabanı verilerini depolama

Artık PostgreSQL için Azure Veri Tabanı Tek sunucu örneğiniz olduğuna göre Spring Cloud Azure kullanarak verileri depolayabilirsiniz.

Spring Cloud Azure Starter JDBC PostgreSQL modülünü yüklemek için pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:

  • Spring Cloud Azure Ürün Reçetesi( BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Bir Not

    Spring Boot 4.0.x kullanıyorsanız, sürümünü olarak 7.4.0ayarlayınspring-cloud-azure-dependencies.

    Spring Boot 3.5.x kullanıyorsanız, sürümünü olarak 6.5.0ayarlayınspring-cloud-azure-dependencies.

    Spring Boot 3.1.x-3.5.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 5.25.0 olarak ayarladığınızdan emin olun.

    Eğer Spring Boot 2.x kullanıyorsanız, spring-cloud-azure-dependencies sürümünü 4.20.0 olarak ayarladığınızdan emin olun.

    Bu Parça Listesi (BOM), <dependencyManagement> bölümünde pom.xml dosyanızda yapılandırılmalıdır. Bu, tüm Spring Cloud Azure bağımlılıklarının aynı sürümü kullanmasını sağlar.

    Bu ürün reçetesi için kullanılan sürüm hakkında daha fazla bilgi için bkz: Hangi Spring Cloud Azure Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter JDBC PostgreSQL bileşeni:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
    </dependency>
    

Bir Not

Sürümünden 4.5.0bu yana parolasız bağlantılar desteklenmektedir.

Spring Boot'ı PostgreSQL için Azure Veri Tabanı kullanacak şekilde yapılandırma

Spring Data JPA kullanarak PostgreSQL için Azure Veri Tabanı verilerini depolamak için uygulamayı yapılandırmak için şu adımları izleyin:

  1. application.properties yapılandırma dosyanıza aşağıdaki özellikleri ekleyerek PostgreSQL için Azure Veri Tabanı kimlik bilgilerini yapılandırın.

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require
    spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest
    spring.datasource.azure.passwordless-enabled=true
    
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
    
  1. Yeni bir Todo Java sınıfı oluşturun. Bu sınıf, JPA tarafından otomatik olarak oluşturulacak todo tablosuna eşlenen bir alan modelidir. Aşağıdaki kod, getters ve setters yöntemlerini yoksayar.

    package com.example.demo;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.Id;
    
    @Entity
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        @GeneratedValue
        private Long id;
    
        private String description;
    
        private String details;
    
        private boolean done;
    
    }
    
  2. Aşağıdaki içeriği göstermek için başlangıç sınıfı dosyasını düzenleyin.

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.event.ApplicationReadyEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.context.annotation.Bean;
    import org.springframework.data.jpa.repository.JpaRepository;
    
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    
    @SpringBootApplication
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
        @Bean
        ApplicationListener<ApplicationReadyEvent> basicsApplicationListener(TodoRepository repository) {
            return event->repository
                .saveAll(Stream.of("A", "B", "C").map(name->new Todo("configuration", "congratulations, you have set up correctly!", true)).collect(Collectors.toList()))
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends JpaRepository<Todo, Long> {
    
    }
    

    İpucu

    Bu öğreticide yapılandırmalarda veya kodda kimlik doğrulama işlemi yoktur. Ancak, Azure hizmetlerine bağlanmak için kimlik doğrulaması gerekir. Kimlik doğrulamasını tamamlamak için Azure Identity kullanmanız gerekir. Spring Cloud Azure, Azure Kimlik kitaplığının herhangi bir kod değişikliği yapmadan kimlik bilgilerini almanıza yardımcı olmak için sağladığı DefaultAzureCredential kullanır.

    DefaultAzureCredential birden çok kimlik doğrulama yöntemini destekler ve çalışma zamanında hangi yöntemin kullanılacağını belirler. Bu yaklaşım, uygulamanızın ortama özgü kod uygulamadan farklı ortamlarda (yerel ve üretim ortamları gibi) farklı kimlik doğrulama yöntemleri kullanmasını sağlar. Daha fazla bilgi için bkz. DefaultAzureCredential.

    Yerel geliştirme ortamlarında kimlik doğrulamasını tamamlamak için Azure CLI, Visual Studio Code, PowerShell veya diğer yöntemleri kullanabilirsiniz. Daha fazla bilgi için bkz. Java geliştirme ortamlarında Azure kimlik doğrulaması. Azure barındırma ortamlarında kimlik doğrulamasını tamamlamak için kullanıcı tarafından atanan yönetilen kimliği kullanmanızı öneririz. Daha fazla bilgi için bkz. Azure kaynakları için yönetilen kimlikler nelerdir?

  3. Uygulamayı başlatın. Aşağıdaki örneğe benzer günlükler görürsünüz:

    2023-02-01 10:29:19.763 DEBUG 4392 --- [main] org.hibernate.SQL : insert into todo (description, details, done, id) values (?, ?, ?, ?)
    com.example.demo.Todo@1f
    

Azure Spring Apps'e dağıtım yapma

Spring Boot uygulamasını yerel olarak çalıştırdığınıza göre artık uygulamayı üretim ortamına taşımanın zamanı geldi. Azure Spring Apps Spring Boot uygulamalarını kod değişikliği olmadan Azure dağıtmayı kolaylaştırır. Hizmet, geliştiricilerin kodlarına odaklanabilmesi için Spring uygulamalarının altyapısını yönetir. Azure Spring Apps kapsamlı izleme ve tanılama, yapılandırma yönetimi, hizmet bulma, CI/CD tümleştirmesi, mavi-yeşil dağıtımlar ve daha fazlasını kullanarak yaşam döngüsü yönetimi sağlar. Uygulamanızı Azure Spring Apps dağıtmak için bkz. İlk uygulamanızı Azure Spring Apps'a dağıtma.

Sonraki adımlar

Spring geliştiricileri için AzureSpring Cloud Azure PostgreSQL Örnekleri