Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento kurz ukazuje, jak ukládat data do databáze Azure Database for MySQL pomocí Spring Data JDBC.
JDBC je standardní rozhraní API Java 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. 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
Předplatné Azure – vytvořte si ho zdarma.
Java Development Kit (JDK) verze 8 nebo vyšší.
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 JDBC a MySQL Driver a pak vyberte Java verze 8 nebo vyšší.
- Pokud ji nemáte, vytvořte instanci flexibilního serveru Azure Database for MySQL s názvem
mysqlflexibletest. Pokyny najdete v tématu Quickstart: Vytvoření flexibilního serveru Azure Database for MySQL/c0 pomocí portálu Azure. Pak vytvořte databázi s názvemdemo. Pokyny najdete v tématu Vytvoření a správa databází pro flexibilní server Azure Database for MySQL.
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-jdbc-mysql.
Nakonfigurujte pravidlo brány firewall pro server MySQL
Azure Database for MySQL instance jsou ve výchozím nastavení zabezpečené. Mají 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 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í neadministrátorského uživatele, který používá připojení bez nutnosti zadání hesla.
Pomocí následujícího příkazu nainstalujte rozšíření Service Connector bez hesla pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgradePomocí 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 tsvPo 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 BOM:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.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-dependenciesverzi na7.2.0.Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit
spring-cloud-azure-dependenciesverzi na6.2.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-dependenciesverzi na4.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 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í Spring Data JDBC, nakonfigurujte aplikaci pomocí následujícího postupu:
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=alwaysVarování
Vlastnost
spring.sql.init.mode=alwayskonfigurace znamená, že Spring Boot automaticky vygeneruje schéma databáze pomocí souboru schema.sql , který vytvoříte příště 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í.Do vlastnosti konfigurace
spring.datasource.urlje 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ě.
- Pokud ho nemáte, vytvořte instanci jednoúčelového serveru Azure Database for MySQL s názvem
mysqlsingletest. Pokyny najdete v tématu Quickstart: Vytvoření serveru Azure Database for MySQL pomocí portálu Azure. Pak vytvořte databázi s názvemdemo. Pokyny najdete v části Vytvoření databázeVytvoření uživatelů v Azure Database for 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-jdbc-mysql.
Nakonfigurujte pravidlo brány firewall pro server MySQL
Azure Database for MySQL instance jsou ve výchozím nastavení zabezpečené. Mají 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 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 uživatele správce Microsoft Entra pro instanci Azure Database for MySQL. 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
Návod
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 BOM:
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.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-dependenciesverzi na7.2.0.Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit
spring-cloud-azure-dependenciesverzi na6.2.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-dependenciesverzi na4.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 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í Spring Data JDBC, nakonfigurujte aplikaci pomocí následujícího postupu:
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=alwaysVarování
Vlastnost
spring.sql.init.mode=alwayskonfigurace znamená, že Spring Boot automaticky vygeneruje schéma databáze pomocí souboru schema.sql , který vytvoříte příště 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í.Do vlastnosti konfigurace
spring.datasource.urlje 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ě.
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);
Vytvořte novou třídu
TodoJava. Tato třída je doménový model mapovaný natodotabulku, která se vytvoří automaticky službou Spring Boot. Následující kód ignorujegettersmetody asettersmetody.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; }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> { }Návod
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.DefaultAzureCredentialpodporuje 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 pro vývojová prostředí 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?
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 aplikaci nasadit do Azure Spring Apps, viz Nasazení první aplikace na Azure Spring Apps.