Použití Spring Data JPA s Azure Database for MySQL

Tento kurz ukazuje, jak ukládat data do databáze Azure Database for MySQL pomocí Spring Data JPA.

Rozhraní API pro perzistenci Java (JPA) je standardní rozhraní API Java pro mapování objektově-relačního.

V tomto kurzu zahrneme dvě metody ověřování: ověřování Microsoft Entra a ověřování MySQL. Na kartě Passwordless se zobrazuje autentizace Microsoft Entra a na kartě Password se zobrazuje autentizace MySQL.

Microsoft Entra ID je mechanismus ověřování pro připojení k Azure Database for MySQL pomocí identit definovaných v Microsoft Entra ID. S ověřováním Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoft v centrálním umístění, což zjednodušuje správu oprávnění.

Ověřování MySQL používá účty uložené v MySQL. Pokud se rozhodnete používat hesla jako přihlašovací údaje pro účty, budou tyto přihlašovací údaje uloženy v user tabulce. Vzhledem k tomu, že tato hesla jsou uložená v MySQL, musíte spravovat rotaci hesel sami.

Požadavky

  • Klient příkazového řádku MySQL.

  • Pokud nemáte aplikaci Spring Boot, vytvořte projekt Maven pomocí aplikace Spring Initializr. Nezapomeňte vybrat Maven Project a v části Dependencies, přidejte Spring Web, Spring Data JPA a MySQL Driver a pak vyberte Java verze 8 nebo vyšší.

Důležité

Pokud chcete používat připojení bez hesla, vytvořte pro instanci Azure Database for MySQL administrátorského uživatele Microsoft Entra. Pokyny najdete v části Konfigurování Microsoft Entra admin části Nastavit ověřování Microsoft Entra pro Azure Database for MySQL – flexibilní server.

Zobrazení ukázkové aplikace

V tomto kurzu naprogramujete ukázkovou aplikaci. Pokud chcete pokračovat rychleji, tato aplikace je už zakódovaná a dostupná na https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql.

Nakonfigurujte pravidlo brány firewall pro váš server MySQL

Azure Database for MySQL instance jsou ve výchozím nastavení zabezpečené. Mají firewall, který nepovoluje žádné příchozí připojení.

Pokud chcete mít možnost používat databázi, otevřete bránu firewall serveru, aby místní IP adresa mohla přistupovat k databázovému serveru. Další informace najdete v tématu Správa pravidel brány firewall pro Azure Database for MySQL - Flexibilní server pomocí portálu Azure.

Pokud se připojujete k serveru MySQL z Subsystém Windows pro Linux (WSL) na Windows počítači, musíte do brány firewall přidat IP adresu hostitele WSL.

Vytvoření uživatele bez oprávnění správce MySQL a udělení oprávnění

Tento krok vytvoří uživatele, který není správcem, a udělí mu všechna oprávnění k demo databázi.

Můžete použít následující metodu k vytvoření uživatele bez administrátorských práv, který se připojuje bez použití hesla.

  1. Pomocí následujícího příkazu nainstalujte rozšíření Service Connector bez hesla pro Azure CLI:

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Pomocí následujícího příkazu vytvořte Microsoft Entra uživatele bez oprávnění správce:

      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
    

    Po dokončení příkazu si poznamenejte uživatelské jméno ve výstupu konzoly.

Ukládání dat z Azure Database for MySQL

Teď, když máte instanci flexibilního serveru Azure Database for MySQL, můžete data ukládat pomocí Azure Spring Cloud.

Pokud chcete nainstalovat modul Spring Cloud Azure Starter JDBC MySQL, přidejte do souboru pom.xml následující závislosti:

  • Spring Cloud Azure seznam položek (BOM):

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

    Poznámka:

    Pokud používáte Spring Boot 4.0.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 7.3.0.

    Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 6.4.0hodnotu.

    Pokud používáte Spring Boot 3.1.x-3.5.x, nezapomeňte nastavit verzi na spring-cloud-azure-dependencies.

    Pokud používáte Spring Boot 2.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 4.20.0.

    Tato faktura materiálu (BOM) by měla být nakonfigurována v <dependencyManagement> části vašeho pom.xml souboru. Tím zajistíte, že všechny závislosti Spring Cloud Azure budou používat stejnou verzi.

    Další informace o verzi použité pro tento kusovník najdete v tématu Kterou verzi Spring Cloud Azure bych měl/a použít.

  • Artefakt Spring Cloud Azure Starter JDBC MySQL:

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

Poznámka:

Připojení bez hesla byla od verze 4.5.0podporována .

Konfigurace Spring Bootu pro použití Azure Database for MySQL

Pokud chcete ukládat data z Azure Database for MySQL pomocí jpa Spring Data, nakonfigurujte aplikaci pomocí následujícího postupu:

  1. Nakonfigurujte přihlašovací údaje Azure Database for MySQL přidáním následujících vlastností do konfiguračního souboru application.properties.

    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
    

    Varování

    Do vlastnosti konfigurace spring.datasource.url je připojeno ?serverTimezone=UTC, aby ovladač JDBC při připojování k databázi použil formát data UTC (nebo koordinovaný univerzální čas). Bez tohoto parametru by váš Java server nepoužil stejný formát data jako databáze, což by vedlo k chybě.

Důležité

Pokud chcete používat připojení bez hesla, vytvořte pro instanci Azure Database for MySQL administrátorského uživatele Microsoft Entra. Pokyny najdete v části Nastavení uživatele Microsoft Entra admin části Použití Microsoft Entra ID pro ověřování pomocí MySQL.

Zobrazení ukázkové aplikace

V tomto článku naprogramujete ukázkovou aplikaci. Pokud chcete pokračovat rychleji, tato aplikace je už zakódovaná a dostupná na https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql.

Nakonfigurujte pravidlo brány firewall pro váš server MySQL

Azure Database for MySQL instance jsou ve výchozím nastavení zabezpečené. Mají firewall, který nepovoluje žádné příchozí připojení.

Pokud chcete mít možnost používat databázi, otevřete bránu firewall serveru, aby místní IP adresa mohla přistupovat k databázovému serveru. Další informace najdete v tématu Vytvoření a správa pravidel brány firewall Azure Database for MySQL pomocí portálu Azure.

Pokud se připojujete k serveru MySQL z Subsystém Windows pro Linux (WSL) na Windows počítači, musíte do brány firewall přidat IP adresu hostitele WSL.

Vytvoření uživatele bez oprávnění správce MySQL a udělení oprávnění

Tento krok vytvoří uživatele, který není správcem, a udělí mu všechna oprávnění k demo databázi.

Důležité

Pokud chcete používat připojení bez hesla, vytvořte pro instanci Azure Database for MySQL administrátorského uživatele Microsoft Entra. Další informace najdete v části Nastavení uživatele Microsoft Entra SprávcePoužití Microsoft Entra ID pro ověřování pomocí MySQL.

Vytvořte skript SQL s názvem create_ad_user.sql pro vytvoření uživatele bez oprávnění správce. Přidejte následující obsah a uložte ho místně:

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

Potom pomocí následujícího příkazu spusťte skript SQL a vytvořte Microsoft Entra uživatele bez oprávnění správce:

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

Tip na radu

Pokud chcete pro připojení k Azure Database for MySQL použít ověřování Microsoft Entra, musíte se přihlásit pomocí uživatele Microsoft Entra správce, který jste nastavili, a pak získat přístupový token jako heslo. Další informace najdete v tématu Použití Microsoft Entra ID pro ověřování pomocí MySQL.

Ukládání dat z Azure Database for MySQL

Nyní, když máte instanci Azure Database for MySQL Single Server, můžete data ukládat pomocí Spring Cloud Azure.

Pokud chcete nainstalovat modul Spring Cloud Azure Starter JDBC MySQL, přidejte do souboru pom.xml následující závislosti:

  • Spring Cloud Azure seznam položek (BOM):

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

    Poznámka:

    Pokud používáte Spring Boot 4.0.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 7.3.0.

    Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 6.4.0hodnotu.

    Pokud používáte Spring Boot 3.1.x-3.5.x, nezapomeňte nastavit verzi na spring-cloud-azure-dependencies.

    Pokud používáte Spring Boot 2.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 4.20.0.

    Tato faktura materiálu (BOM) by měla být nakonfigurována v <dependencyManagement> části vašeho pom.xml souboru. Tím zajistíte, že všechny závislosti Spring Cloud Azure budou používat stejnou verzi.

    Další informace o verzi použité pro tento kusovník najdete v tématu Kterou verzi Spring Cloud Azure bych měl/a použít.

  • Artefakt Spring Cloud Azure Starter JDBC MySQL:

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

Poznámka:

Připojení bez hesla byla od verze 4.5.0podporována .

Konfigurace Spring Bootu pro použití Azure Database for MySQL

Pokud chcete ukládat data z Azure Database for MySQL pomocí jpa Spring Data, nakonfigurujte aplikaci pomocí následujícího postupu:

  1. Nakonfigurujte přihlašovací údaje Azure Database for MySQL přidáním následujících vlastností do konfiguračního souboru application.properties.

    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
    

    Varování

    Do vlastnosti konfigurace spring.datasource.url je připojeno ?serverTimezone=UTC, aby ovladač JDBC při připojování k databázi použil formát data UTC (nebo koordinovaný univerzální čas). Bez tohoto parametru by váš Java server nepoužil stejný formát data jako databáze, což by vedlo k chybě.

  1. Vytvořte novou třídu Todo Java. Tato třída je doménový model mapovaný na tabulku todo, která bude automaticky vytvořena pomocí JPA. Následující kód ignoruje getters metody a setters metody.

    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. Upravte soubor spouštěcí třídy, aby se zobrazil následující obsah.

    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> {
    
    }
    

    Tip na radu

    V tomto kurzu nejsou v konfiguracích ani kódu žádné ověřovací operace. Připojení ke službám Azure ale vyžaduje ověření. K dokončení ověřování je potřeba použít Azure Identity. Spring Cloud Azure používá DefaultAzureCredential, které knihovna identit Azure poskytuje, aby vám pomohla získat přihlašovací údaje bez jakýchkoli změn kódu.

    DefaultAzureCredential podporuje více metod ověřování a určuje, kterou metodu použít za běhu. Tento přístup umožňuje vaší aplikaci používat různé metody ověřování v různých prostředích (například v místních a produkčních prostředích) bez implementace kódu specifického pro prostředí. Další informace naleznete v tématu DefaultAzureCredential.

    K dokončení ověřování v místních vývojových prostředích můžete použít Azure CLI, Visual Studio Code, PowerShell nebo jiné metody. Další informace najdete v tématu Azure ověřování ve vývojových prostředích Java. K dokončení ověřování v Azure hostitelských prostředích doporučujeme použít spravovanou identitu přiřazenou uživatelem. Další informace najdete v tématu Co jsou spravované identity pro prostředky Azure?

  3. Spusťte aplikaci. Zobrazí se protokoly podobné následujícímu příkladu:

    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
    

Nasazení do Azure Spring Apps

Teď, když máte aplikaci Spring Boot spuštěnou místně, je čas ji přesunout do produkčního prostředí. Azure Spring Apps usnadňuje nasazování aplikací Spring Boot do Azure bez jakýchkoli změn kódu. Služba spravuje infrastrukturu aplikací Spring, aby se vývojáři mohli soustředit na svůj kód. Azure Spring Apps poskytuje správu životního cyklu pomocí komplexního monitorování a diagnostiky, správy konfigurace, zjišťování služeb, integrace CI/CD, modrých zelených nasazení a dalších. Pokud chcete aplikaci nasadit do Azure Spring Apps, podívejte se na Nasazení první aplikace do Azure Spring Apps.

Další kroky