Udostępnij za pośrednictwem


Używanie narzędzia Spring Data JPA z usługą Azure Database for MySQL

W tym samouczku pokazano, jak przechowywać dane w bazie danych usługi Azure Database for MySQL przy użyciu narzędzia Spring Data JPA.

Interfejs API trwałości języka Java (JPA) to standardowy interfejs API języka Java na potrzeby mapowania relacyjnego obiektów.

W tym samouczku uwzględnimy dwie metody uwierzytelniania: uwierzytelnianie firmy Microsoft Entra i uwierzytelnianie MySQL. Karta Bez hasła zawiera uwierzytelnianie firmy Microsoft Entra, a karta Hasło zawiera uwierzytelnianie MySQL.

Uwierzytelnianie Microsoft Entra to mechanizm łączenia się z usługą Azure Database for MySQL przy użyciu tożsamości zdefiniowanych w Microsoft Entra ID. Dzięki uwierzytelnieniu firmy Microsoft Entra można zarządzać tożsamościami użytkowników bazy danych i innymi usługi firmy Microsoft w centralnej lokalizacji, co upraszcza zarządzanie uprawnieniami.

Uwierzytelnianie mySQL używa kont przechowywanych w usłudze MySQL. Jeśli zdecydujesz się używać haseł jako poświadczeń dla kont, te poświadczenia będą przechowywane w user tabeli. Ponieważ te hasła są przechowywane w usłudze MySQL, musisz samodzielnie zarządzać rotacją haseł.

Wymagania wstępne

  • Klient wiersza polecenia MySQL.

  • Jeśli nie masz aplikacji Spring Boot, utwórz projekt Maven za pomocą narzędzia Spring Initializr. Pamiętaj, aby wybrać Projekt Maven i w obszarze Zależności dodać Spring Web, Spring Data JPA i Sterownik MySQL, a następnie wybrać wersję Javy 8 lub nowszą.

  • Jeśli nie masz takiego serwera, utwórz wystąpienie elastycznego serwera Azure Database for MySQL o nazwie mysqlflexibletest. Aby uzyskać instrukcje, zobacz Szybki start: tworzenie serwera elastycznego usługi Azure Database for MySQL przy użyciu witryny Azure Portal. Następnie utwórz bazę danych o nazwie demo. Aby uzyskać instrukcje, zobacz Tworzenie baz danych dla serwera elastycznego usługi Azure Database for MySQL i zarządzanie nimi.

Ważne

Aby używać połączeń bezhasłowych, utwórz użytkownika administratora usługi Microsoft Entra dla wystąpienia usługi Azure Database for MySQL. Aby uzyskać instrukcje, zobacz sekcję Konfigurowanie Microsoft Entra Admin w Konfigurowanie uwierzytelniania Microsoft Entra dla usługi Azure Database for MySQL - serwer elastyczny.

Zobacz przykładową aplikację

W tym samouczku utworzysz kod przykładowej aplikacji. Jeśli chcesz przyspieszyć, ta aplikacja jest już kodowana i dostępna pod adresem https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql.

Konfigurowanie reguły zapory dla serwera MySQL

Wystąpienia usługi Azure Database for MySQL są domyślnie zabezpieczone. Ma ona zaporę, która nie zezwala na żadne połączenie przychodzące.

Aby móc używać bazy danych, otwórz zaporę serwera, aby zezwolić lokalnemu adresowi IP na dostęp do serwera bazy danych. Aby uzyskać więcej informacji, zobacz Zarządzanie regułami zapory dla usługi Azure Database for MySQL — serwer elastyczny przy użyciu witryny Azure Portal.

Jeśli łączysz się z serwerem MySQL za pomocą Podsystemu Windows dla systemu Linux (WSL) na komputerze z systemem Windows, musisz dodać adres IP hosta WSL do swojej zapory, aby umożliwić połączenie.

Tworzenie użytkownika innego niż administrator programu MySQL i udzielanie uprawnień

Ten krok spowoduje utworzenie użytkownika niebędącego administratorem i przyznanie mu wszystkich uprawnień do demo bazy danych.

Poniższa metoda umożliwia utworzenie użytkownika niebędącego administratorem korzystającego z połączenia bez hasła.

  1. Użyj następującego polecenia, aby zainstalować rozszerzenie Łącznik Usługi bez hasła dla interfejsu wiersza polecenia platformy Azure CLI.

     az extension add --name serviceconnector-passwordless --upgrade
    
  2. Użyj następującego polecenia, aby utworzyć użytkownika niebędącego administratorem w Microsoft Entra.

      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 zakończeniu wykonywania polecenia zanotuj nazwę użytkownika w danych wyjściowych konsoli.

Przechowywanie danych z usługi Azure Database for MySQL

Teraz, gdy masz elastyczne wystąpienie serwera bazy danych MySQL w Azure, możesz przechowywać dane przy użyciu platformy Spring Cloud Azure.

Aby zainstalować moduł Spring Cloud Azure Starter JDBC MySQL, dodaj następujące zależności do pliku pom.xml :

  • Projekt Spring Cloud Azure Bill of Materials (BOM):

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

    Uwaga

    Jeśli używasz środowiska Spring Boot 2.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 4.20.0. "Zestawienie materiałowe (BOM)" należy skonfigurować w sekcji <dependencyManagement> pliku pom.xml. Gwarantuje to, że wszystkie zależności Spring Cloud Azure korzystają z tej samej wersji. Aby uzyskać więcej informacji na temat wersji używanej dla tego elementu BOM, zobacz Którą wersję Spring Cloud Azure powinienem używać.

  • Artefakt Spring Cloud Azure Starter JDBC dla MySQL:

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

Uwaga

Połączenia bez hasła są obsługiwane od wersji 4.5.0.

Konfigurowanie platformy Spring Boot do korzystania z usługi Azure Database for MySQL

Aby przechowywać dane z usługi Azure Database for MySQL przy użyciu narzędzia Spring Data JPA, wykonaj następujące kroki, aby skonfigurować aplikację:

  1. Skonfiguruj poświadczenia do usługi Azure Database for MySQL, dodając poniższe właściwości do pliku konfiguracyjnego 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
    

    Ostrzeżenie

    Właściwość konfiguracji spring.datasource.url została dodana, aby poinformować sterownik JDBC o użyciu formatu daty UTC (uniwersalnego czasu koordynowanego) przy łączeniu się z bazą danych. Bez tego parametru serwer Java nie będzie używał tego samego formatu daty co baza danych, co spowodowałoby błąd.

Ważne

Aby używać połączeń bezhasłowych, utwórz użytkownika administratora usługi Microsoft Entra dla wystąpienia usługi Azure Database for MySQL. Aby uzyskać instrukcje, odwołaj się do sekcji Konfigurowanie użytkownika admina Microsoft Entra w temacie Używanie Microsoft Entra ID do uwierzytelniania z MySQL.

Zobacz przykładową aplikację

W tym artykule kodujesz przykładową aplikację. Jeśli chcesz przyspieszyć, ta aplikacja jest już kodowana i dostępna pod adresem https://github.com/Azure-Samples/quickstart-spring-data-jpa-mysql.

Konfigurowanie reguły zapory dla serwera MySQL

Wystąpienia usługi Azure Database for MySQL są domyślnie zabezpieczone. Ma ona zaporę, która nie zezwala na żadne połączenie przychodzące.

Aby móc używać bazy danych, otwórz zaporę serwera, aby zezwolić lokalnemu adresowi IP na dostęp do serwera bazy danych. Aby uzyskać więcej informacji, zobacz Tworzenie reguł zapory usługi Azure Database for MySQL i zarządzanie nimi przy użyciu witryny Azure Portal.

Jeśli łączysz się z serwerem MySQL za pomocą Podsystemu Windows dla systemu Linux (WSL) na komputerze z systemem Windows, musisz dodać adres IP hosta WSL do swojej zapory, aby umożliwić połączenie.

Tworzenie użytkownika innego niż administrator programu MySQL i udzielanie uprawnień

Ten krok spowoduje utworzenie użytkownika niebędącego administratorem i przyznanie mu wszystkich uprawnień do demo bazy danych.

Ważne

Aby używać połączeń bezhasłowych, utwórz użytkownika administratora usługi Microsoft Entra dla wystąpienia usługi Azure Database for MySQL. Aby uzyskać więcej informacji, zobacz sekcję Ustawianie użytkownika administratora Microsoft Entra w części zatytułowanej Używanie identyfikatora Microsoft Entra ID do uwierzytelniania w MySQL.

Utwórz skrypt SQL o nazwie create_ad_user.sql na potrzeby tworzenia użytkownika niebędącego administratorem. Dodaj następującą zawartość i zapisz ją lokalnie:

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

Następnie użyj następującego polecenia, aby uruchomić skrypt SQL w celu utworzenia użytkownika bez uprawnień administratora w Microsoft Entra:

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

Napiwek

Aby nawiązać połączenie z usługą Azure Database for MySQL przy użyciu uwierzytelniania Microsoft Entra, musisz zalogować się przy użyciu skonfigurowanego użytkownika administratora Microsoft Entra, a następnie uzyskać token dostępu w roli hasła. Aby uzyskać więcej informacji, zobacz Use Microsoft Entra ID for authentication with MySQL (Używanie identyfikatora Entra firmy Microsoft do uwierzytelniania za pomocą programu MySQL).

Przechowywanie danych z usługi Azure Database for MySQL

Teraz, gdy masz wystąpienie usługi Azure Database for MySQL Single Server, możesz przechowywać dane przy użyciu platformy Spring Cloud Azure.

Aby zainstalować moduł Spring Cloud Azure Starter JDBC MySQL, dodaj następujące zależności do pliku pom.xml :

  • Projekt Spring Cloud Azure Bill of Materials (BOM):

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

    Uwaga

    Jeśli używasz środowiska Spring Boot 2.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 4.20.0. "Zestawienie materiałowe (BOM)" należy skonfigurować w sekcji <dependencyManagement> pliku pom.xml. Gwarantuje to, że wszystkie zależności Spring Cloud Azure korzystają z tej samej wersji. Aby uzyskać więcej informacji na temat wersji używanej dla tego elementu BOM, zobacz Którą wersję Spring Cloud Azure powinienem używać.

  • Artefakt Spring Cloud Azure Starter JDBC dla MySQL:

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

Uwaga

Połączenia bez hasła są obsługiwane od wersji 4.5.0.

Konfigurowanie platformy Spring Boot do korzystania z usługi Azure Database for MySQL

Aby przechowywać dane z usługi Azure Database for MySQL przy użyciu narzędzia Spring Data JPA, wykonaj następujące kroki, aby skonfigurować aplikację:

  1. Skonfiguruj poświadczenia do usługi Azure Database for MySQL, dodając poniższe właściwości do pliku konfiguracyjnego 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
    

    Ostrzeżenie

    Właściwość konfiguracji spring.datasource.url została dodana, aby poinformować sterownik JDBC o użyciu formatu daty UTC (uniwersalnego czasu koordynowanego) przy łączeniu się z bazą danych. Bez tego parametru serwer Java nie będzie używał tego samego formatu daty co baza danych, co spowodowałoby błąd.

  1. Utwórz nową Todo klasę Języka Java. Ta klasa jest modelem domeny mapowanym na tabelę todo, która zostanie utworzona automatycznie przez JPA. Poniższy kod ignoruje metody getters i setters.

    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. Edytuj plik klasy uruchamiania, aby wyświetlić następującą zawartość.

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

    Napiwek

    W tym samouczku nie ma żadnych operacji uwierzytelniania w konfiguracjach ani w kodzie. Jednak nawiązywanie połączenia z usługami platformy Azure wymaga uwierzytelniania. Aby ukończyć uwierzytelnianie, musisz użyć usługi Azure Identity. Platforma Spring Cloud na platformie Azure używa DefaultAzureCredentialbiblioteki tożsamości platformy Azure, która ułatwia uzyskiwanie poświadczeń bez żadnych zmian w kodzie.

    DefaultAzureCredential obsługuje wiele metod uwierzytelniania i określa, która metoda ma być używana w czasie wykonywania. Takie podejście umożliwia aplikacji używanie różnych metod uwierzytelniania w różnych środowiskach (takich jak środowiska lokalne i produkcyjne) bez implementowania kodu specyficznego dla środowiska. Aby uzyskać więcej informacji, zobacz DefaultAzureCredential.

    Aby ukończyć uwierzytelnianie w lokalnych środowiskach deweloperskich, możesz użyć interfejsu wiersza polecenia platformy Azure, programu Visual Studio Code, programu PowerShell lub innych metod. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie platformy Azure w środowiskach deweloperskich Java. Aby ukończyć uwierzytelnianie w środowiskach hostingu platformy Azure, zalecamy użycie tożsamości zarządzanej przypisanej przez użytkownika. Aby uzyskać więcej informacji, zobacz Co to są tożsamości zarządzane dla zasobów platformy Azure?

  3. Uruchom aplikację. Zobaczysz dzienniki podobne do następującego przykładu:

    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
    

Wdrażanie do Azure Spring Apps

Teraz, gdy aplikacja Spring Boot działa lokalnie, nadszedł czas, aby przenieść ją do środowiska produkcyjnego. Usługa Azure Spring Apps ułatwia wdrażanie aplikacji Spring Boot na platformie Azure bez żadnych zmian w kodzie. Usługa zarządza infrastrukturą aplikacji Spring, aby deweloperzy mogli skupić się na swoim kodzie. Usługa Azure Spring Apps zapewnia zarządzanie cyklem życia przy użyciu kompleksowego monitorowania i diagnostyki, zarządzania konfiguracją, odnajdywania usług, integracji z CI/CD, wdrożeń niebiesko-zielonych i nie tylko. Aby wdrożyć aplikację w usłudze Azure Spring Apps, zobacz Wdrażanie pierwszej aplikacji w usłudze Azure Spring Apps.

Następne kroki