Použití Spring Data JDBC se službou Azure SQL Database

Tento kurz ukazuje, jak ukládat data ve službě Azure SQL Database 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í služby SQL Database. Karta Bez hesla zobrazuje ověřování Microsoft Entra a karta Heslo zobrazuje ověřování sql Database.

Ověřování Microsoft Entra je mechanismus pro připojení ke službě Azure Database for SQL Database 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í 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

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

Konfigurace pravidla brány firewall pro server služby Azure SQL Database

Instance Azure SQL Database 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 Kurz: Zabezpečení databáze ve službě Azure SQL Database.

Pokud se připojujete k serveru Azure SQL Database z Subsystém Windows pro Linux (WSL) na počítači s Windows, 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 hesla, přečtěte si kurz: Zabezpečení databáze ve službě Azure SQL Database nebo použití nástroje Service Připojení or 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. Nejprve nainstalujte rozšíření Service Připojení or bez hesla pro Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Potom pomocí následujícího příkazu vytvořte uživatele Microsoft Entra, který není správcem:

    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é

Připojení bez hesla databáze Azure SQL vyžadují upgrade ovladače MS SQL Serveru na verzi 12.1.0 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 instancí Azure SQL Database můžete data ukládat pomocí Spring Cloud Azure.

Pokud chcete nainstalovat modul Spring Cloud Azure Starter, 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.11.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 na 4.17.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:

    <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í služby Azure SQL Database

Pokud chcete ukládat data ze služby Azure SQL Database pomocí Spring Data JDBC, 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.springframework.jdbc.core=DEBUG
    
    spring.datasource.url=jdbc:sqlserver://sqlservertest.database.windows.net:1433;databaseName=demo;authentication=DefaultAzureCredential;
    
    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. To je skvělé pro testování, ale mějte na paměti, že se data odstraní při každém restartování, takže byste je neměli používat v produkčním prostředí.

  1. 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 INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Vytvořte novou Todo třídu Java. Tato třída je doménový model mapovaný na todo tabulku, která se vytvoří automaticky službou Spring Boot. Následující kód ignoruje getters metody a setters 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;
    
    }
    
  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.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?

  3. 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.

Další kroky