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

W tym samouczku pokazano, jak przechowywać dane w usłudze Azure SQL Database 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 usługi SQL Database. Karta Bez hasła zawiera uwierzytelnianie usługi Microsoft Entra, a karta Hasło zawiera uwierzytelnianie usługi SQL Database.

Uwierzytelnianie entra firmy Microsoft to mechanizm łączenia się z usługą Azure Database for SQL Database przy użyciu tożsamości zdefiniowanych w identyfikatorze Entra firmy Microsoft. 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 usługi SQL Database używa kont przechowywanych w usłudze SQL Database. Jeśli zdecydujesz się używać haseł jako poświadczeń dla kont, te poświadczenia będą przechowywane w tabeli użytkowników. Ponieważ te hasła są przechowywane w usłudze SQL Database, musisz samodzielnie zarządzać rotacją haseł.

Wymagania wstępne

  • Narzędzie sqlcmd

  • Sterownik ODBC 17 lub 18.

  • Jeśli go nie masz, utwórz wystąpienie programu Azure SQL Server o nazwie i bazę danych o nazwie sqlservertestdemo. Aby uzyskać instrukcje, zobacz Szybki start: tworzenie pojedynczej bazy danych — Azure SQL Database.

  • Jeśli nie masz aplikacji Spring Boot, utwórz projekt Maven za pomocą narzędzia Spring Initializr. Pamiętaj, aby wybrać pozycję Projekt Maven, a następnie w obszarze Zależności dodaj zależności Spring Web, Spring Data JPA i MS SQL Server Driver , a następnie wybierz pozycję Java w wersji 8 lub nowszej.

Ważne

Aby używać połączeń bez hasła, uaktualnij sterownik programu MS SQL Server do wersji 12.1.0 lub nowszej, a następnie utwórz użytkownika administratora usługi Microsoft Entra dla wystąpienia serwera usługi Azure SQL Database. Aby uzyskać więcej informacji, zobacz sekcję Tworzenie administratora firmy Microsoft Entra w temacie Samouczek: zabezpieczanie bazy danych w usłudze Azure SQL Database.

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-sql-server.

Konfigurowanie reguły zapory dla serwera usługi Azure SQL Database

Wystąpienia usługi Azure SQL Database 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 Samouczek: zabezpieczanie bazy danych w usłudze Azure SQL Database.

Jeśli łączysz się z serwerem usługi Azure SQL Database z Podsystem Windows dla systemu Linux (WSL) na komputerze z systemem Windows, musisz dodać identyfikator hosta WSL do zapory.

Tworzenie użytkownika niebędącego administratorem bazy danych SQL i udzielanie uprawnień

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

Aby używać połączeń bez hasła, zobacz Samouczek: zabezpieczanie bazy danych w usłudze Azure SQL Database lub używanie usługi Połączenie or do utworzenia użytkownika administratora usługi Microsoft Entra dla serwera usługi Azure SQL Database, jak pokazano w poniższych krokach:

  1. Najpierw zainstaluj rozszerzenie service Połączenie or passwordless dla interfejsu wiersza polecenia platformy Azure:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Następnie użyj następującego polecenia, aby utworzyć użytkownika innego niż administrator firmy Microsoft:

    az connection create sql \
        --resource-group <your-resource-group-name> \
        --connection sql_conn \
        --target-resource-group <your-resource-group-name> \
        --server sqlservertest \
        --database demo \
        --user-account \
        --query authInfo.userName \
        --output tsv
    

Utworzony administrator firmy Microsoft Entra jest administratorem bazy danych SQL, więc nie musisz tworzyć nowego użytkownika.

Ważne

Połączenia bez hasła bazy danych Azure SQL Database wymagają uaktualnienia sterownika programu MS SQL Server do wersji lub nowszej 12.1.0 . Opcja połączenia jest authentication=DefaultAzureCredential w wersji 12.1.0 i authentication=ActiveDirectoryDefault w wersji 12.2.0.

Przechowywanie danych z usługi Azure SQL Database

Za pomocą wystąpienia usługi Azure SQL Database można przechowywać dane przy użyciu platformy Spring Cloud Azure.

Aby zainstalować moduł Spring Cloud Azure Starter, 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.12.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.18.0. Ten rachunek materiału (BOM) należy skonfigurować w <dependencyManagement> sekcji pliku pom.xml . Gwarantuje to, że wszystkie zależności platformy Azure platformy Spring Cloud korzystają z tej samej wersji. Aby uzyskać więcej informacji na temat wersji używanej dla tego modelu BOM, zobacz Która wersja platformy Spring Cloud platformy Azure powinna być używana.

  • Artefakt spring cloud Azure Starter:

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

    Uwaga

    Ponieważ jest to zależność, należy ją dodać w <dependencies> sekcji pom.xml. Jego wersja nie jest skonfigurowana w tym miejscu, ponieważ jest zarządzana przez model BOM, który dodaliśmy wcześniej.

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

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

  1. Skonfiguruj poświadczenia usługi Azure SQL Database w pliku konfiguracji application.properties .

    logging.level.org.hibernate.SQL=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2016Dialect
    spring.jpa.hibernate.ddl-auto=create-drop
    

    Ostrzeżenie

    Właściwość konfiguracji spring.jpa.hibernate.ddl-auto=create-drop oznacza, że platforma Spring Boot automatycznie utworzy schemat bazy danych podczas uruchamiania aplikacji i spróbuje go usunąć po jej zamknięciu. Ta funkcja doskonale nadaje się do testowania, ale pamiętaj, że dane zostaną usunięte po każdym ponownym uruchomieniu, więc nie należy ich używać w środowisku produkcyjnym.

  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 getters metody 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 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 w usłudze 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/ciągłego wdrażania, wdrożeń niebieskich 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