Sdílet prostřednictvím


Použití Spring Data JPA s Azure SQL Database

Tento kurz ukazuje, jak ukládat data v Azure SQL Database pomocí Spring Data JPA.

Rozhraní Java Persistence API (JPA) je standardní rozhraní API Java pro objektově-relační mapování.

V tomto kurzu zahrneme dvě metody ověřování: Microsoft Entra ověřování a ověřování služby SQL Database. Na kartě Bez hesla se zobrazuje autentizace Microsoft Entra a na kartě Heslo se zobrazuje autentizace SQL Database.

Ověření Microsoft Entra je mechanismus pro připojení k Azure SQL Database pomocí identit definovaných v rámci Microsoft Entra ID. S ověřováním Microsoft Entra můžete spravovat identity uživatelů databáze a další služby Microsoftu v centrálním umístění, což zjednodušuje správu oprávnění.

Ověřování sql Database používá účty uložené ve službě SQL Database. Pokud se rozhodnete používat hesla jako přihlašovací údaje pro účty, budou tyto přihlašovací údaje uloženy v tabulce uživatelů. Vzhledem k tomu, že tato hesla jsou uložená ve službě SQL Database, je potřeba spravovat rotaci hesel sami.

Požadavky

Důležité

Pokud chcete používat připojení bez hesla, upgradujte Ovladač SQL Server MS na verzi 12.1.0 nebo vyšší a vytvořte uživatele správce Microsoft Entra pro instanci serveru Azure SQL Database. Další informace najdete v části Vytvoření správce Microsoft Entra v části Tutorial: Zabezpečení databáze v Azure SQL Database.

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

Konfigurujte pravidlo brány firewall pro svůj server Azure SQL Database

Azure SQL Database instance jsou ve výchozím nastavení zabezpečené. Mají 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 Tutorial: Zabezpečení databáze v Azure SQL Database.

Pokud se připojujete k serveru Azure SQL Database z Windows Subsystem for Linux (WSL) na Windows počítači, musíte do brány firewall přidat ID hostitele WSL.

Vytvoření uživatele, který není správcem databáze SQL, 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.

Pokud chcete používat připojení bez hesel, přečtěte si téma Tutorial: Zabezpečení databáze v Azure SQL Database nebo použijte Service Connector k vytvoření uživatele správce Microsoft Entra pro váš server Azure SQL Database, jak je znázorněno v následujících krocích:

  1. Nejdřív nainstalujte rozšíření Service Connector bez hesla pro Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Potom pomocí následujícího příkazu vytvořte Microsoft Entra uživatele bez oprávnění správce:

    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
    

Správce Microsoft Entra, který jste vytvořili, je uživatel správce databáze SQL, takže nemusíte vytvářet nového uživatele.

Důležité

Bezheslová připojení k databázi Azure SQL vyžadují upgrade ovladače MS SQL Server na verzi nebo vyšší. Možnost připojení je authentication=DefaultAzureCredential ve verzi 12.1.0 a authentication=ActiveDirectoryDefault ve verzi 12.2.0.

Ukládání dat z Azure SQL Database

S Azure SQL Database instancí můžete data ukládat pomocí Azure Spring Cloud.

Pokud chcete nainstalovat modul Spring Cloud Azure Starter, přidejte do souboru pom.xml0 následující závislosti:

  • Spring Cloud Azure Bill of Materials (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.1.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-dependencies verzi na 7.1.0.

    Pokud používáte Spring Boot 3.5.x, nezapomeňte nastavit spring-cloud-azure-dependencies verzi na 6.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-dependencies verzi na 4.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 tuto BOM najdete v tématu Kterou verzi Spring Cloud Azure bych měl/a použít.

  • Úvodní artefakt Spring Cloudu Azure:

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

    Poznámka:

    Vzhledem k tomu, že se jedná o závislost, měla by být přidána do <dependencies> části pom.xml. Jeho verze zde není nakonfigurovaná, protože je spravovaná kusovníkem, který jsme přidali dříve.

Konfigurace Spring Bootu pro použití Azure SQL Database

Pokud chcete ukládat data z Azure SQL Database pomocí jpa Spring Data, nakonfigurujte aplikaci pomocí následujícího postupu:

  1. Nakonfigurujte přihlašovací údaje Azure SQL Database v konfiguračním souboru 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
    

    Varování

    Konfigurační vlastnost spring.jpa.hibernate.ddl-auto=create-drop znamená, že Spring Boot při spuštění aplikace automaticky vytvoří schéma databáze a při ukončení se ho pokusí odstranit. 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í.

  1. Vytvořte novou třídu Todo Java. Tato třída je doménový model mapovaný na tabulku todo, která bude automaticky vytvořena pomocí JPA. Následující kód ignoruje getters metody a setters metody.

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

    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.

    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 autentizace Azure ve vývojových prostředích pro 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?

  3. Spusťte aplikaci. Zobrazí se protokoly podobné následujícímu příkladu:

    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
    

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í vaší první aplikace na Azure Spring Apps.

Další kroky