Spring Data JPA gebruiken met Azure SQL Database
In deze zelfstudie ziet u hoe u gegevens opslaat in Azure SQL Database met behulp van Spring Data JPA.
De Java Persistence-API (JPA) is de standaard Java-API voor object-relationele toewijzing.
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
Een Azure-abonnement (u kunt een gratis abonnement maken).
Java Development Kit (JDK), versie 8 of hoger.
ODBC-stuurprogramma 17 of 18.
Als u er nog geen hebt, maakt u een Azure SQL Server-exemplaar met de naam
sqlservertest
en een database met de naamdemo
. Zie quickstart: Een individuele database maken - Azure SQL Database voor instructies.Als u geen Spring Boot-toepassing hebt, maakt u een Maven-project met de Spring Initializr. Zorg ervoor dat u Maven-project selecteert en onder Afhankelijkheden de afhankelijkheden van Spring Web, Spring Data JPA en MS SQL Server-stuurprogramma's toevoegt en vervolgens Java-versie 8 of hoger selecteert.
Belangrijk
Als u wachtwoordloze verbindingen wilt gebruiken, voert u een upgrade uit van het MS SQL Server-stuurprogramma naar versie 12.1.0
of hoger en maakt u vervolgens een Microsoft Entra-beheerdergebruiker voor uw Azure SQL Database-serverexemplaren. Zie de sectie Een Microsoft Entra-beheerder maken van zelfstudie: Een database beveiligen in Azure SQL Database voor meer informatie.
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-jpa-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:
Installeer eerst de serviceconnector-extensie zonder wachtwoord voor de Azure CLI:
az extension add --name serviceconnector-passwordless --upgrade
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.19.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 op4.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 JPA, voert u de volgende stappen uit om de toepassing te configureren:
Configureer een Azure SQL Database-referenties in het configuratiebestand 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
Waarschuwing
Met de configuratie-eigenschap
spring.jpa.hibernate.ddl-auto=create-drop
wordt aangegeven dat Spring Boot automatisch een databaseschema maakt bij het opstarten van de toepassing en wordt geprobeerd het te verwijderen wanneer de toepassing wordt afgesloten. Deze functie is ideaal voor testen, maar vergeet niet dat uw gegevens bij elke herstart worden verwijderd, dus u moet deze niet gebruiken in productie.
Maak een nieuwe
Todo
Java-klasse. Deze klasse is een domeinmodel dat is toegewezen aan detodo
tabel die automatisch wordt gemaakt door JPA. De volgende code negeert degetters
ensetters
methoden.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; }
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.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> { }
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
DefaultAzureCredential
van, 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.
Start de toepassing. U ziet logboeken die vergelijkbaar zijn met het volgende voorbeeld:
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
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.