Share via


MySQL için Azure Veritabanı ile Spring Data JPA kullanma

Bu öğreticide Spring Data JPA kullanarak verilerin MySQL için Azure Veritabanı veritabanında 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 MySQL kimlik doğrulaması. Parolasız sekmesi Microsoft Entra kimlik doğrulamasını, Parola sekmesi ise MySQL kimlik doğrulamasını gösterir.

Microsoft Entra kimlik doğrulaması, Microsoft Entra Id'de tanımlanan kimlikleri kullanarak MySQL için Azure Veritabanı bağlanmaya yönelik bir mekanizmadır. Microsoft Entra kimlik doğrulaması ile veritabanı kullanıcı kimliklerini ve diğer Microsoft hizmetleri merkezi bir konumda yönetebilir ve bu da izin yönetimini basitleştirir.

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

Önkoşullar

  • MySQL komut satırı istemcisi.

  • Spring Boot uygulamanız yoksa Spring Initializr ile bir Maven projesi oluşturun. Maven Projesi'ni seçtiğinizden ve Bağımlılıklar'ın altında Spring Web, Spring Data JPA ve MySQL Driver bağımlılıklarını eklediğinizden emin olun ve ardından Java sürüm 8 veya üzerini seçin.

Önemli

Parolasız bağlantıları kullanmak için MySQL için Azure Veritabanı örneğine yönelik bir Microsoft Entra yönetici kullanıcısı oluşturun. Yönergeler için, MySQL için Azure Veritabanı için Microsoft Entra kimlik doğrulamasını ayarlama - Esnek Sunucu'nun Microsoft Entra Yönetici yapılandırma bölümüne bakın.

Örnek uygulamaya bakın

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

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

MySQL için Azure Veritabanı ö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 MySQL için Azure Veritabanı - Esnek Sunucu için güvenlik duvarı kurallarını yönetme.

Windows bilgisayarda Linux için Windows Alt Sistemi 'den (WSL) MySQL sunucunuza bağlanıyorsanız, WSL ana bilgisayar IP adresini güvenlik duvarınıza eklemeniz gerekir.

Yönetici olmayan bir MySQL kullanıcısı oluşturma ve izin verme

Bu adım yönetici olmayan bir kullanıcı oluşturur ve veritabanındaki demo tüm izinleri ona verir.

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 Hizmet Bağlan veya parolasız uzantısını 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ısını oluşturmak için aşağıdaki komutu kullanın:

      az connection create mysql-flexible \
           --resource-group <your_resource_group_name> \
           --connection mysql_conn \
           --target-resource-group <your_resource_group_name> \
           --server mysqlflexibletest \
           --database demo \
           --user-account mysql-identity-id=/subscriptions/<your_subscription_id>/resourcegroups/<your_resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<your_user_assigned_managed_identity_name> \
           --query authInfo.userName \
           --output tsv
    

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

MySQL için Azure Veritabanı verilerini depolama

Artık MySQL için Azure Veritabanı Esnek sunucu örneğiniz olduğuna göre Spring Cloud Azure'ı kullanarak verileri depolayabilirsiniz.

Spring Cloud Azure Starter JDBC MySQL 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>5.12.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 2.x kullanıyorsanız, sürümünü olarak 4.18.0ayarladığınızdan spring-cloud-azure-dependencies emin olun. Bu Ürün Reçetesi (BOM), pom.xml dosyanızın bölümünde yapılandırılmalıdır<dependencyManagement>. 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 . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter JDBC MySQL yapıtı:

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

Not

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

Spring Boot’u MySQL için Azure Veritabanı’nı kullanacak şekilde yapılandırma

Spring Data JPA kullanarak MySQL için Azure Veritabanı 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 MySQL için Azure Veritabanı kimlik bilgilerini yapılandırın.

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.azure.passwordless-enabled=true
    spring.datasource.url=jdbc:mysql://mysqlflexibletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC
    spring.datasource.username=<your_mysql_ad_non_admin_username>
    
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8Dialect
    

    Uyarı

    Yapılandırma özelliği spring.datasource.url?serverTimezone=UTC , JDBC sürücüsüne veritabanına bağlanırken UTC tarih biçimini (veya Eşgüdümlü Evrensel Saat) kullanmasını bildirmek için eklenmiştir. Bu parametre olmadan Java sunucunuz veritabanıyla aynı tarih biçimini kullanmaz ve bu da hataya neden olur.

Önemli

Parolasız bağlantıları kullanmak için MySQL için Azure Veritabanı örneğine yönelik bir Microsoft Entra yönetici kullanıcısı oluşturun. Yönergeler için MySQL ile kimlik doğrulaması için Microsoft Entra Kimliğini kullanma Yönetici Microsoft Entra kimliğini ayarlama bölümüne bakın.

Örnek uygulamaya bakın

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

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

MySQL için Azure Veritabanı ö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 MySQL için Azure Veritabanı güvenlik duvarı kurallarını oluşturma ve yönetme.

Windows bilgisayarda Linux için Windows Alt Sistemi 'den (WSL) MySQL sunucunuza bağlanıyorsanız, WSL ana bilgisayar IP adresini güvenlik duvarınıza eklemeniz gerekir.

Yönetici olmayan bir MySQL kullanıcısı oluşturma ve izin verme

Bu adım yönetici olmayan bir kullanıcı oluşturur ve veritabanındaki demo tüm izinleri ona verir.

Önemli

Parolasız bağlantıları kullanmak için MySQL için Azure Veritabanı örneğine yönelik bir Microsoft Entra yönetici kullanıcısı oluşturun. Daha fazla bilgi için MySQL ile kimlik doğrulaması için Microsoft Entra Kimliğini kullanma'nın Microsoft Entra Yönetici kullanıcısını ayarlama bölümüne bakın.

Yönetici olmayan kullanıcı oluşturmak için create_ad_user.sql adlı bir SQL betiği oluşturun. Aşağıdaki içeriği ekleyin ve yerel olarak kaydedin:

export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)

cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '<your_mysql_ad_non_admin_username>' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON demo.* TO '<your_mysql_ad_non_admin_username>'@'%';
FLUSH privileges;
EOF

Ardından aşağıdaki komutu kullanarak SQL betiğini çalıştırarak Microsoft Entra yönetici olmayan kullanıcıyı oluşturun:

mysql -h mysqlsingletest.mysql.database.azure.com --user <your_mysql_ad_admin_username>@mysqlsingletest --enable-cleartext-plugin --password=$(az account get-access-token --resource-type oss-rdbms --output tsv --query accessToken) < create_ad_user.sql

İpucu

MySQL için Azure Veritabanı bağlanmak için Microsoft Entra kimlik doğrulamasını kullanmak için, ayarladığınız Microsoft Entra yönetici kullanıcısıyla oturum açmanız ve ardından erişim belirtecini parola olarak almanız gerekir. Daha fazla bilgi için bkz . MySQL ile kimlik doğrulaması için Microsoft Entra Id kullanma.

MySQL için Azure Veritabanı verilerini depolama

Artık MySQL için Azure Veritabanı Tek Sunucu örneğiniz olduğuna göre Spring Cloud Azure'ı kullanarak verileri depolayabilirsiniz.

Spring Cloud Azure Starter JDBC MySQL 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>5.12.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Not

    Spring Boot 2.x kullanıyorsanız, sürümünü olarak 4.18.0ayarladığınızdan spring-cloud-azure-dependencies emin olun. Bu Ürün Reçetesi (BOM), pom.xml dosyanızın bölümünde yapılandırılmalıdır<dependencyManagement>. 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 . Spring Cloud Azure'ın Hangi Sürümünü Kullanmalıyım.

  • Spring Cloud Azure Starter JDBC MySQL yapıtı:

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

Not

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

Spring Boot’u MySQL için Azure Veritabanı’nı kullanacak şekilde yapılandırma

Spring Data JPA kullanarak MySQL için Azure Veritabanı 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 MySQL için Azure Veritabanı kimlik bilgilerini yapılandırın.

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.azure.passwordless-enabled=true
    spring.datasource.url=jdbc:mysql://mysqlsingletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC
    spring.datasource.username=<your_mysql_ad_non_admin_username>@mysqlsingletest
    
    spring.jpa.hibernate.ddl-auto=create-drop
    spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8Dialect
    

    Uyarı

    Yapılandırma özelliği spring.datasource.url?serverTimezone=UTC , JDBC sürücüsüne veritabanına bağlanırken UTC tarih biçimini (veya Eşgüdümlü Evrensel Saat) kullanmasını bildirmek için eklenmiştir. Bu parametre olmadan Java sunucunuz veritabanıyla aynı tarih biçimini kullanmaz ve bu da hataya neden olur.

  1. Yeni Todo bir Java sınıfı oluşturun. Bu sınıf, JPA tarafından otomatik olarak oluşturulacak tabloya todo eşlenen bir etki alanı modelidir. Aşağıdaki kod ve setters yöntemlerini yoksayargetters.

    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ığı öğesini kullanır DefaultAzureCredential.

    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ğıtma

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 , kod değişikliği yapmadan Spring Boot uygulamalarını Azure'a 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'e dağıtmak için bkz . İlk uygulamanızı Azure Spring Apps'e dağıtma.

Sonraki adımlar