Použití Spring Data JDBC se službou Azure Database for MySQL

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

JDBC je standardní rozhraní Java API pro připojení k tradičním relačním databázím.

V tomto kurzu zahrneme dvě metody ověřování: ověřování Microsoft Entra a ověřování MySQL. Karta Bez hesla zobrazuje ověřování Microsoft Entra a karta Heslo zobrazuje ověřování MySQL.

Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Database for MySQL pomocí identit definovaných v MICROSOFT Entra ID. Pomocí ověřování 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 projekt Maven a v části Závislosti přidejte závislosti Spring Web, Spring Data JDBC a Ovladače MySQL a pak vyberte Javu verze 8 nebo vyšší.

Zobrazení ukázkové aplikace

V tomto kurzu naprogramujete ukázkovou aplikaci. Pokud chcete přejít rychleji, tato aplikace je již kódována a k dispozici na adrese https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql.

Konfigurace pravidla brány firewall pro server MySQL

Instance Azure Database for MySQL jsou ve výchozím nastavení zabezpečené. Obsahuje bránu 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 flexibilní server Azure Database for MySQL pomocí webu Azure Portal.

Pokud se připojujete k serveru MySQL z Subsystém Windows pro Linux (WSL) na počítači s Windows, 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.

Následující metodu můžete použít k vytvoření uživatele bez hesla, který používá připojení bez hesla.

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

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Pomocí následujícího příkazu vytvořte uživatele Microsoft Entra 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 ze služby Azure Database for MySQL

Teď, když máte instanci flexibilního serveru Azure Database for MySQL, 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:

  • Kusovník materiálů (BOM) Spring Cloud v Azure:

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

    Poznámka:

    Pokud používáte Spring Boot 2.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 4.17.0. Tato faktura materiálu (BOM) by měla být nakonfigurována v <dependencyManagement> části vašeho pom.xml souboru. Tím se zajistí, že všechny závislosti Azure Spring Cloudu budou používat stejnou verzi. Další informace o verzi použité pro tuto kusovníku najdete v tématu Jakou verzi Spring Cloud Azure mám 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 Boot pro použití služby Azure Database for MySQL

Pokud chcete ukládat data ze služby Azure Database for MySQL pomocí Spring Data JDBC, 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.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:mysql://mysqlflexibletest.mysql.database.azure.com:3306/demo?serverTimezone=UTC
    spring.datasource.username=<your_mysql_ad_non_admin_username>
    spring.datasource.azure.passwordless-enabled=true
    
    spring.sql.init.mode=always
    

    Upozorňující

    Vlastnost spring.sql.init.mode=always konfigurace znamená, že Spring Boot automaticky vygeneruje schéma databáze pomocí souboru schema.sql , který vytvoříte při každém spuštění serveru. Tato funkce je skvělá pro testování, ale nezapomeňte, že při každém restartování odstraní vaše data, takže byste je neměli používat v produkčním prostředí.

    Vlastnost spring.datasource.url konfigurace byla připojena ?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áš server Java nepoužil stejný formát data jako databáze, což by vedlo k chybě.

Zobrazení ukázkové aplikace

V tomto článku naprogramujete ukázkovou aplikaci. Pokud chcete přejít rychleji, tato aplikace je již kódována a k dispozici na adrese https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql.

Konfigurace pravidla brány firewall pro server MySQL

Instance Azure Database for MySQL jsou ve výchozím nastavení zabezpečené. Obsahuje bránu 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 služby Azure Database for MySQL pomocí webu Azure Portal.

Pokud se připojujete k serveru MySQL z Subsystém Windows pro Linux (WSL) na počítači s Windows, 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 uživatele správce Microsoft Entra pro vaši instanci Azure Database for MySQL. Další informace najdete v části Nastavení microsoft Entra Správa uživatelské části Použití ID Microsoft Entra 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 uživatele Microsoft Entra 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

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

Ukládání dat ze služby Azure Database for MySQL

Teď, když máte instanci jednoúčelového serveru Azure Database for MySQL, 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:

  • Kusovník materiálů (BOM) Spring Cloud v Azure:

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

    Poznámka:

    Pokud používáte Spring Boot 2.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 4.17.0. Tato faktura materiálu (BOM) by měla být nakonfigurována v <dependencyManagement> části vašeho pom.xml souboru. Tím se zajistí, že všechny závislosti Azure Spring Cloudu budou používat stejnou verzi. Další informace o verzi použité pro tuto kusovníku najdete v tématu Jakou verzi Spring Cloud Azure mám 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 Boot pro použití služby Azure Database for MySQL

Pokud chcete ukládat data ze služby Azure Database for MySQL pomocí Spring Data JDBC, 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.springframework.jdbc.core=DEBUG
    
    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.datasource.azure.passwordless-enabled=true
    
    spring.sql.init.mode=always
    

    Upozorňující

    Vlastnost spring.sql.init.mode=always konfigurace znamená, že Spring Boot automaticky vygeneruje schéma databáze pomocí souboru schema.sql , který vytvoříte při každém spuštění serveru. Tato funkce je skvělá pro testování, ale nezapomeňte, že při každém restartování odstraní vaše data, takže byste je neměli používat v produkčním prostředí.

    Vlastnost spring.datasource.url konfigurace byla připojena ?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áš server Java nepoužil stejný formát data jako databáze, což by vedlo k chybě.

  1. Vytvořte konfigurační soubor src/main/resources/schema.sql pro konfiguraci schématu databáze a přidejte následující obsah.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
    
  1. Vytvořte novou Todo třídu Java. Tato třída je doménový model mapovaný na todo tabulku, která se vytvoří automaticky službou Spring Boot. Následující kód ignoruje getters metody a setters metody.

    import org.springframework.data.annotation.Id;
    
    public class Todo {
    
        public Todo() {
        }
    
        public Todo(String description, String details, boolean done) {
            this.description = description;
            this.details = details;
            this.done = done;
        }
    
        @Id
        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.repository.CrudRepository;
    
    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)).toList())
                .forEach(System.out::println);
        }
    
    }
    
    interface TodoRepository extends CrudRepository<Todo, Long> {
    
    }
    

    Tip

    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 identitu Azure. Spring Cloud Azure používá DefaultAzureCredential, kterou poskytuje knihovna identit Azure, která vám pomůže 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 Ověřování Azure ve vývojových prostředích Java. K dokončení ověřování v hostitelských prostředích Azure 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. Aplikace ukládá data do databáze. Zobrazí se protokoly podobné následujícímu příkladu:

    2023-02-01 10:22:36.701 DEBUG 7948 --- [main] o.s.jdbc.core.JdbcTemplate : Executing prepared SQL statement [INSERT INTO todo (description, details, done) VALUES (?, ?, ?)]    
    com.example.demo.Todo@4bdb04c8
    

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 nasadit aplikaci do Azure Spring Apps, přečtěte si téma Nasazení první aplikace do Azure Spring Apps.

Další kroky