Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie wordt gedemonstreerd hoe u gegevens opslaat in een Azure Database for PostgreSQL-database met behulp van Spring Data JDBC.
JDBC is de standaard Java-API om verbinding te maken met traditionele relationele databases.
In deze handleiding bespreken we twee authenticatiemethoden: Microsoft Entra-authenticatie en PostgreSQL-authenticatie. Op het tabblad Wachtwoordloos wordt de Microsoft Entra-verificatie weergegeven en op het tabblad Wachtwoord wordt de PostgreSQL-verificatie weergegeven.
Microsoft Entra-verificatie is een mechanisme voor het maken van verbinding met Azure Database for PostgreSQL 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.
PostgreSQL-verificatie maakt gebruik van accounts die zijn opgeslagen in PostgreSQL. Als u ervoor kiest om wachtwoorden als referenties voor de accounts te gebruiken, worden deze referenties opgeslagen in de user tabel. Omdat deze wachtwoorden zijn opgeslagen in PostgreSQL, 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.
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 PostgreSQL-stuurprogramma's toevoegt en vervolgens Java-versie 8 of hoger selecteert.
- Als u er geen hebt, maakt u een Azure Database for PostgreSQL Flexible Server-exemplaar met de naam
postgresqlflexibletesten een database met de naamdemo. Zie quickstart: Een Azure Database for PostgreSQL - Flexible Server maken in Azure Portal voor instructies.
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-postgresql.
Een firewallregel voor uw PostgreSQL-server configureren
Azure Database for PostgreSQL-instanties 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 Firewallregels in Azure Database for PostgreSQL - Flexible Server voor meer informatie.
Als u verbinding maakt met uw PostgreSQL-server vanaf Windows-subsysteem voor Linux (WSL) op een Windows-computer, moet u de WSL-host-id toevoegen aan uw firewall.
Een postgreSQL-gebruiker zonder beheerdersrechten maken en toestemming verlenen
Maak vervolgens een niet-administratieve gebruiker aan en geef alle machtigingen voor de database.
U kunt de volgende methode gebruiken om een niet-beheerder te maken die gebruikmaakt van een verbinding zonder wachtwoord.
Gebruik de volgende opdracht om de serviceconnector-extensie zonder wachtwoord te installeren voor de Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeGebruik de volgende opdracht om de niet-beheerdersgebruiker van Microsoft Entra te maken:
az connection create postgres-flexible \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlflexibletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsvWanneer de opdracht is voltooid, noteert u de gebruikersnaam in de console-uitvoer.
Gegevens opslaan uit Azure Database for PostgreSQL
Nu u een Azure Database for PostgreSQL Flexible Server-exemplaar hebt, kunt u gegevens opslaan met behulp van Spring Cloud Azure.
Als u de Spring Cloud Azure Starter JDBC PostgreSQL-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>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst (BOM) 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 JDBC PostgreSQL-artefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Notitie
Verbindingen zonder wachtwoord worden ondersteund sinds versie 4.5.0.
Spring Boot configureren voor het gebruik van Azure Database for PostgreSQL
Als u gegevens uit Azure Database for PostgreSQL wilt opslaan met Spring Data JDBC, voert u de volgende stappen uit om de toepassing te configureren:
Configureer Azure Database for PostgreSQL-referenties door de volgende eigenschappen toe te voegen aan het configuratiebestand application.properties .
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlflexibletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username> spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=alwaysWaarschuwing
De configuratie-eigenschap
spring.sql.init.mode=alwaysbetekent dat Spring Boot automatisch een databaseschema genereert met behulp van het schema.sql-bestand dat u vervolgens maakt, telkens wanneer de server wordt gestart. 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.
- Als u er nog geen hebt, maakt u een exemplaar van Azure Database for PostgreSQL Single Server met de naam
postgresqlsingletesten een database met de naamdemo. Zie quickstart: Een Azure Database for PostgreSQL-server maken met behulp van Azure Portal voor instructies.
Bekijk de voorbeeldtoepassing
In dit artikel codet 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-postgresql.
Een firewallregel voor uw PostgreSQL-server configureren
Azure Database for PostgreSQL-instanties 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 Firewallregels maken en beheren voor Azure Database for PostgreSQL - Enkele server met behulp van Azure Portal voor meer informatie.
Als u verbinding maakt met uw PostgreSQL-server vanaf Windows-subsysteem voor Linux (WSL) op een Windows-computer, moet u de WSL-host-id toevoegen aan uw firewall.
Een postgreSQL-gebruiker zonder beheerdersrechten maken en toestemming verlenen
Maak vervolgens een niet-administratieve gebruiker aan en geef alle machtigingen voor de database.
U kunt de volgende methode gebruiken om een niet-beheerder te maken die gebruikmaakt van een verbinding zonder wachtwoord.
Gebruik de volgende opdracht om de serviceconnector-extensie zonder wachtwoord te installeren voor de Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeGebruik de volgende opdracht om de niet-beheerdersgebruiker van Microsoft Entra te maken:
az connection create postgres \ --resource-group <your_resource_group_name> \ --connection postgres_conn \ --target-resource-group <your_resource_group_name> \ --server postgresqlsingletest \ --database demo \ --user-account \ --query authInfo.userName \ --output tsvWanneer de opdracht is voltooid, noteert u de gebruikersnaam in de console-uitvoer.
Gegevens opslaan uit Azure Database for PostgreSQL
Nu u een exemplaar van Azure Database for PostgreSQL Single Server hebt, kunt u gegevens opslaan door Spring Cloud Azure te gebruiken.
Als u de Spring Cloud Azure Starter JDBC PostgreSQL-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>6.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Notitie
Als u Spring Boot 3.0.x-3.4.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.23.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze stuklijst (BOM) 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 JDBC PostgreSQL-artefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Notitie
Verbindingen zonder wachtwoord worden ondersteund sinds versie 4.5.0.
Spring Boot configureren voor het gebruik van Azure Database for PostgreSQL
Als u gegevens uit Azure Database for PostgreSQL wilt opslaan met Spring Data JDBC, voert u de volgende stappen uit om de toepassing te configureren:
Configureer Azure Database for PostgreSQL-referenties door de volgende eigenschappen toe te voegen aan het configuratiebestand application.properties .
logging.level.org.springframework.jdbc.core=DEBUG spring.datasource.url=jdbc:postgresql://postgresqlsingletest.postgres.database.azure.com:5432/demo?sslmode=require spring.datasource.username=<your_postgresql_ad_non_admin_username>@postgresqlsingletest spring.datasource.azure.passwordless-enabled=true spring.sql.init.mode=alwaysWaarschuwing
De configuratie-eigenschap
spring.sql.init.mode=alwaysbetekent dat Spring Boot automatisch een databaseschema genereert met behulp van het schema.sql-bestand dat u vervolgens maakt, telkens wanneer de server wordt gestart. 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 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 SERIAL PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BOOLEAN);
Maak een nieuwe
TodoJava-klasse. Deze klasse is een domeinmodel dat is toegewezen aan detodotabel die automatisch wordt gemaakt door Spring Boot. De volgende code negeert degettersensettersmethoden.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> { }Aanbeveling
In deze handleiding zijn er geen verificatiebewerkingen opgenomen 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 van
DefaultAzureCredential, die door de Azure Identity-bibliotheek wordt geleverd om u te helpen referenties te verkrijgen zonder dat er codewijzigingen nodig zijn.DefaultAzureCredentialondersteunt 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.