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
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 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šší.
- Pokud ho nemáte, vytvořte instanci flexibilního serveru Azure Database for MySQL s názvem
mysqlflexibletest
. Pokyny najdete v tématu Rychlý start: Vytvoření flexibilního serveru Azure Database for MySQL pomocí webu Azure Portal. Pak vytvořte databázi s názvemdemo
. Pokyny najdete v tématu Vytvář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 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.
Pomocí následujícího příkazu nainstalujte rozšíření bez hesla konektoru služby pro Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
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.18.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 na4.19.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.0
podporová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:
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ě.
- Pokud ho nemáte, vytvořte instanci jednoúčelového serveru Azure Database for MySQL s názvem
mysqlsingletest
. Pokyny najdete v tématu Rychlý start: Vytvoření serveru Azure Database for MySQL pomocí webu Azure Portal. Pak vytvořte databázi s názvemdemo
. Pokyny najdete v části Vytvoření databáze v části Vytvoření uživatelů ve službě Azure Database for MySQL.
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í uživatelského oddílu Microsoft Entra Admin v čá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.18.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 na4.19.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.0
podporová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:
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ě.
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
Todo
třídu Java. Tato třída je doménový model mapovaný natodo
tabulku, která se vytvoří automaticky službou Spring Boot. Následující kód ignorujegetters
metody asetters
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; }
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?
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.