Delen via


Spring Data JDBC gebruiken met Azure SQL Database

In deze zelfstudie wordt gedemonstreerd hoe u gegevens opslaat in Azure SQL Database met behulp van Spring Data JDBC.

JDBC is de standaard Java-API om verbinding te maken met traditionele relationele databases.

In deze zelfstudie bevatten we twee verificatiemethoden: Microsoft Entra-verificatie en SQL Database-verificatie. Op het tabblad Wachtwoordloos wordt de Microsoft Entra-verificatie weergegeven en op het tabblad Wachtwoord wordt de SQL Database-verificatie weergegeven.

Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for SQL Database met behulp van identiteiten die zijn gedefinieerd in Microsoft Entra-id. Met Microsoft Entra-verificatie kunt u databasegebruikersidentiteiten en andere Microsoft-services op een centrale locatie beheren, waardoor het beheer van machtigingen wordt vereenvoudigd.

SQL Database-verificatie maakt gebruik van accounts die zijn opgeslagen in SQL Database. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de gebruikerstabel. Omdat deze wachtwoorden zijn opgeslagen in SQL Database, moet u de rotatie van de wachtwoorden zelf beheren.

Vereisten

Bekijk de voorbeeldtoepassing

In deze zelfstudie codeert u een voorbeeldtoepassing. Als u sneller wilt gaan, is deze toepassing al gecodeerd en beschikbaar op https://github.com/Azure-Samples/quickstart-spring-data-jdbc-sql-server.

Een firewallregel configureren voor uw Azure SQL Database-server

Azure SQL Database-exemplaren worden standaard beveiligd. Ze hebben een firewall die geen enkele binnenkomende verbinding toestaat.

Als u de database wilt kunnen gebruiken, opent u de firewall van de server om het lokale IP-adres toegang te geven tot de databaseserver. Zie Zelfstudie: Een database beveiligen in Azure SQL Database voor meer informatie.

Als u verbinding maakt met uw Azure SQL Database-server vanaf Windows-subsysteem voor Linux (WSL) op een Windows-computer, moet u de WSL-host-id toevoegen aan uw firewall.

Een sql-database maken die geen beheerder is en machtigingen verlenen

Met deze stap maakt u een niet-beheerder en verleent u alle machtigingen voor de demo database.

Zie Zelfstudie: Een database beveiligen in Azure SQL Database of serviceconnector gebruiken om een Microsoft Entra-beheerdergebruiker te maken voor uw Azure SQL Database-server, zoals wordt weergegeven in de volgende stappen:

  1. Installeer eerst de serviceconnector-extensie zonder wachtwoord voor de Azure CLI:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Gebruik vervolgens de volgende opdracht om de niet-beheerdersgebruiker van Microsoft Entra te maken:

    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
    

De Microsoft Entra-beheerder die u hebt gemaakt, is een sql-databasebeheerder, dus u hoeft geen nieuwe gebruiker te maken.

Belangrijk

Voor verbindingen zonder wachtwoord voor Azure SQL Database moet het MS SQL Server-stuurprogramma worden bijgewerkt naar versie 12.1.0 of hoger. De verbindingsoptie is authentication=DefaultAzureCredential in versie 12.1.0 en authentication=ActiveDirectoryDefault in versie 12.2.0.

Gegevens opslaan uit Azure SQL Database

Met een Azure SQL Database-exemplaar kunt u gegevens opslaan met behulp van Spring Cloud Azure.

Als u de Spring Cloud Azure Starter-module wilt installeren, voegt u de volgende afhankelijkheden toe aan uw pom.xml-bestand :

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

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

    Notitie

    Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 4.19.0. Deze stuklijst (Bill of Material) moet worden geconfigureerd in de <dependencyManagement> sectie van uw pom.xml-bestand . Dit zorgt ervoor dat alle Spring Cloud Azure-afhankelijkheden dezelfde versie gebruiken. Zie welke versie van Spring Cloud Azure moet ik gebruiken voor meer informatie over de versie die voor deze BOM wordt gebruikt.

  • Het Spring Cloud Azure Starter-artefact:

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

    Notitie

    Aangezien dit een afhankelijkheid is, moet deze worden toegevoegd in de <dependencies> sectie van de pom.xml. De versie is hier niet geconfigureerd, omdat deze wordt beheerd door de bom die we eerder hebben toegevoegd.

Spring Boot configureren voor het gebruik van Azure SQL Database

Als u gegevens uit Azure SQL Database wilt opslaan met Spring Data JDBC, voert u de volgende stappen uit om de toepassing te configureren:

  1. Configureer een Azure SQL Database-referenties in het configuratiebestand 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
    

    Waarschuwing

    De configuratie-eigenschap spring.sql.init.mode=always betekent dat Spring Boot automatisch een databaseschema genereert met behulp van het schema.sql-bestand dat u vervolgens maakt, telkens wanneer de server wordt gestart. Dit is handig voor het testen, maar vergeet niet dat uw gegevens bij elke herstart worden verwijderd, dus u moet deze niet gebruiken in productie.

  1. Maak het configuratiebestand src/main/resources/schema.sql om het databaseschema te configureren en voeg vervolgens de volgende inhoud toe.

    DROP TABLE IF EXISTS todo;
    CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
    
  1. Maak een nieuwe Todo Java-klasse. Deze klasse is een domeinmodel dat is toegewezen aan de todo tabel die automatisch wordt gemaakt door Spring Boot. De volgende code negeert de getters en setters methoden.

    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. Bewerk het opstartklassebestand om de volgende inhoud weer te geven.

    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

    In deze zelfstudie zijn er geen verificatiebewerkingen in de configuraties of de code. Voor het maken van verbinding met Azure-services is echter verificatie vereist. Als u de verificatie wilt voltooien, moet u Azure Identity gebruiken. Spring Cloud Azure maakt gebruik DefaultAzureCredentialvan, die de Azure Identity-bibliotheek biedt om u te helpen referenties op te halen zonder dat er codewijzigingen zijn aangebracht.

    DefaultAzureCredential ondersteunt meerdere verificatiemethoden en bepaalt welke methode tijdens runtime moet worden gebruikt. Met deze aanpak kan uw app verschillende verificatiemethoden gebruiken in verschillende omgevingen (zoals lokale en productieomgevingen) zonder omgevingsspecifieke code te implementeren. Zie DefaultAzureCredential voor meer informatie.

    Als u de verificatie in lokale ontwikkelomgevingen wilt voltooien, kunt u Azure CLI, Visual Studio Code, PowerShell of andere methoden gebruiken. Zie Azure-verificatie in Java-ontwikkelomgevingen voor meer informatie. Als u de verificatie in Azure-hostingomgevingen wilt voltooien, raden we u aan om een door de gebruiker toegewezen beheerde identiteit te gebruiken. Zie Wat zijn beheerde identiteiten voor Azure-resources? voor meer informatie.

  3. Start de toepassing. De toepassing slaat gegevens op in de database. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:

    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
    

Implementeren in Azure Spring Apps

Nu de Spring Boot-toepassing lokaal wordt uitgevoerd, is het tijd om deze naar productie te verplaatsen. Met Azure Spring Apps kunt u Eenvoudig Spring Boot-toepassingen implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Uw eerste toepassing implementeren in Azure Spring Apps om uw toepassing te implementeren in Azure Spring Apps.

Volgende stappen