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
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 JDBC en MS SQL Server-stuurprogramma's toevoegt en vervolgens Java-versie 8 of hoger selecteert.
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:
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 JDBC, 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.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.
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);
Maak een nieuwe
Todo
Java-klasse. Deze klasse is een domeinmodel dat is toegewezen aan detodo
tabel die automatisch wordt gemaakt door Spring Boot. De volgende code negeert degetters
ensetters
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; }
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
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. 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.