Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come archiviare i dati in Azure Database for PostgreSQL usando Spring Data JPA.
L'API di persistenza di Java (JPA) è l'API standard di Java per la mappatura oggetti-relazionale.
In questa esercitazione sono inclusi due metodi di autenticazione: l'autenticazione di Microsoft Entra e l'autenticazione di PostgreSQL. La scheda Passwordless mostra l'autenticazione Microsoft Entra e la scheda Password mostra l'autenticazione PostgreSQL.
Microsoft Entra l'autenticazione è un meccanismo per connettersi a Azure Database for PostgreSQL usando le identità definite in Microsoft Entra ID. Con l'autenticazione Microsoft Entra, è possibile gestire le identità utente del database e altri servizi Microsoft in una posizione centrale, semplificando la gestione delle autorizzazioni.
L'autenticazione PostgreSQL usa gli account archiviati in PostgreSQL. Se si sceglie di usare password come credenziali per gli account, queste credenziali verranno archiviate nella tabella user. Poiché queste password vengono archiviate in PostgreSQL, è necessario gestire manualmente la rotazione delle password.
Prerequisiti
Una sottoscrizione Azure - crearne una gratuitamente.
Java Development Kit (JDK) versione 8 o successiva.
Se non si ha un'applicazione Spring Boot, creare un progetto Maven con Spring Initializr. Assicurarsi di selezionare Maven Project e, in Dependencies aggiungere il Spring Web, Spring Data JDBC e PostgreSQL Driver e quindi selezionare Java versione 8 o successiva.
- Se non è disponibile, creare un'istanza del server flessibile Azure Database for PostgreSQL denominata
postgresqlflexibleteste un database denominatodemo. Per istruzioni, vedere Quickstart: Creare un server flessibile Azure Database for PostgreSQL nel portale di Azure.
Importante
Per usare connessioni senza password, configurare l'utente amministratore Microsoft Entra per l'istanza del server flessibile Azure Database for PostgreSQL. Per altre informazioni, vedere Gestire i ruoli di Microsoft Entra in Azure Database for PostgreSQL - Server flessibile.
Vedere l'applicazione di esempio
In questa esercitazione verrà codificata un'applicazione di esempio. Se si vuole andare più velocemente, questa applicazione è già codificata e disponibile in https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.
Configurare una regola del firewall per il server PostgreSQL
Le istanze di Azure Database for PostgreSQL sono protette per impostazione predefinita. Includono un firewall che non consente alcuna connessione in ingresso.
Per poter usare il database, aprire il firewall del server per consentire all'indirizzo IP locale di accedere al server di database. Per ulteriori informazioni, vedere regole del firewall in Azure Database for PostgreSQL - Server flessibile.
Se ci si connette al server PostgreSQL da Windows Subsystem for Linux (WSL) in un computer Windows, è necessario aggiungere l'ID host WSL al firewall.
Creare un utente non amministratore di PostgreSQL e concedere l'autorizzazione
Creare quindi un utente non amministratore e concedere tutte le autorizzazioni al database.
È possibile usare il metodo seguente per creare un utente non amministratore che usa una connessione senza password.
Usare il comando seguente per installare Service Connector estensione senza password per l'Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeUsare il comando seguente per creare l'Microsoft Entra utente non amministratore:
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 tsvAl termine del comando, prendere nota del nome utente nell'output della console.
Archiviare dati da Azure Database for PostgreSQL
Ora che si dispone di un'istanza del server flessibile Azure Database for PostgreSQL, è possibile archiviare i dati usando Spring Cloud Azure.
Per installare il modulo Spring Cloud Azure Starter JDBC PostgreSQL, aggiungere le dipendenze seguenti al file pom.xml:
L'elenco dei materiali di Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se si usa Spring Boot 4.0.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su7.1.0.Se si usa Spring Boot 3.5.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su6.1.0.Se si usa Spring Boot 3.1.x-3.5.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su5.25.0.Se si usa Spring Boot 2.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su4.20.0.Questo Bill of Material (BOM) deve essere configurato nella sezione
<dependencyManagement>del file pom.xml. In questo modo, tutte le dipendenze di Spring Cloud Azure usano la stessa versione.Per ulteriori informazioni sulla versione utilizzata per questo BOM, vedere Quale versione di Spring Cloud Azure dovrei usare.
L'artefatto JDBC PostgreSQL di Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Nota
Le connessioni senza password sono supportate dalla versione 4.5.0.
Configurare Spring Boot per l'uso di Azure Database for PostgreSQL
Per archiviare dati da Azure Database for PostgreSQL usando Spring Data JPA, seguire questa procedura per configurare l'applicazione:
Configurare le credenziali di Azure Database for PostgreSQL aggiungendo le seguenti proprietà al file di configurazione application.properties.
logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
- Se non è disponibile, creare un'istanza del server singolo Azure Database for PostgreSQL denominata
postgresqlsingleteste un database denominatodemo. Per istruzioni, vedere Quickstart: Creare un server Azure Database for PostgreSQL usando il portale di Azure.
Importante
Per utilizzare le connessioni senza password, configura l'utente amministratore di Microsoft Entra per l'istanza di Azure Database per il server singolo di PostgreSQL. Per altre informazioni, vedere Usare Microsoft Entra ID per l'autenticazione con PostgreSQL.
Vedere l'applicazione di esempio
In questo articolo verrà codificata un'applicazione di esempio. Se si vuole andare più velocemente, questa applicazione è già codificata e disponibile in https://github.com/Azure-Samples/quickstart-spring-data-jpa-postgresql.
Configurare una regola del firewall per il server PostgreSQL
Le istanze di Azure Database for PostgreSQL sono protette per impostazione predefinita. Includono un firewall che non consente alcuna connessione in ingresso.
Per poter usare il database, aprire il firewall del server per consentire all'indirizzo IP locale di accedere al server di database. Per altre informazioni, vedere Creare e gestire le regole del firewall per Azure Database for PostgreSQL - Server singolo usando il portale di Azure.
Se ci si connette al server PostgreSQL da Windows Subsystem for Linux (WSL) in un computer Windows, è necessario aggiungere l'ID host WSL al firewall.
Creare un utente non amministratore di PostgreSQL e concedere l'autorizzazione
Creare quindi un utente non amministratore e concedere tutte le autorizzazioni al database.
È possibile usare il metodo seguente per creare un utente non amministratore che usa una connessione senza password.
Usare il comando seguente per installare Service Connector estensione senza password per l'Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeUsare il comando seguente per creare l'Microsoft Entra utente non amministratore:
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 tsvAl termine del comando, prendere nota del nome utente nell'output della console.
Archiviare dati da Azure Database for PostgreSQL
Ora che si dispone di un'istanza del server singolo Azure Database for PostgreSQL, è possibile archiviare i dati usando Spring Cloud Azure.
Per installare il modulo Spring Cloud Azure Starter JDBC PostgreSQL, aggiungere le dipendenze seguenti al file pom.xml:
L'elenco dei materiali di Spring Cloud Azure (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Nota
Se si usa Spring Boot 4.0.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su7.1.0.Se si usa Spring Boot 3.5.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su6.1.0.Se si usa Spring Boot 3.1.x-3.5.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su5.25.0.Se si usa Spring Boot 2.x, assicurarsi di impostare la
spring-cloud-azure-dependenciesversione su4.20.0.Questo Bill of Material (BOM) deve essere configurato nella sezione
<dependencyManagement>del file pom.xml. In questo modo, tutte le dipendenze di Spring Cloud Azure usano la stessa versione.Per ulteriori informazioni sulla versione utilizzata per questo BOM, vedere Quale versione di Spring Cloud Azure dovrei usare.
L'artefatto JDBC PostgreSQL di Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId> </dependency>
Nota
Le connessioni senza password sono supportate dalla versione 4.5.0.
Configurare Spring Boot per l'uso di Azure Database for PostgreSQL
Per archiviare dati da Azure Database for PostgreSQL usando Spring Data JPA, seguire questa procedura per configurare l'applicazione:
Configurare le credenziali di Azure Database for PostgreSQL aggiungendo le seguenti proprietà al file di configurazione application.properties.
logging.level.org.hibernate.SQL=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.jpa.hibernate.ddl-auto=create-drop spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Creare una nuova classe
TodoJava. Questa classe è un modello di dominio mappato allatodotabella che verrà creato automaticamente da JPA. Il codice seguente ignora igettersmetodi esetters.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; }Modificare il file della classe di avvio per visualizzare il contenuto seguente.
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> { }Suggerimento
In questa esercitazione non sono presenti operazioni di autenticazione nelle configurazioni o nel codice. Tuttavia, la connessione ai servizi di Azure richiede l'autenticazione. Per completare l'autenticazione, è necessario usare Azure Identity. Spring Cloud Azure usa
DefaultAzureCredential, che la libreria di identità Azure fornisce per ottenere le credenziali senza modifiche al codice.DefaultAzureCredentialsupporta più metodi di autenticazione e determina il metodo da usare in fase di esecuzione. Questo approccio consente all'app di usare metodi di autenticazione diversi in ambienti diversi (ad esempio ambienti locali e di produzione) senza implementare codice specifico dell'ambiente. Per altre informazioni, vedere DefaultAzureCredential.Per completare l'autenticazione negli ambienti di sviluppo locali, è possibile usare Azure CLI, Visual Studio Code, PowerShell o altri metodi. Per altre informazioni, vedere autenticazione Azure in ambienti di sviluppo Java. Per completare l'autenticazione negli ambienti di hosting Azure, è consigliabile usare l'identità gestita assegnata dall'utente. Per altre informazioni, vedere Che sono identità gestite per le risorse Azure?
Avviare l’applicazione. Verranno visualizzati log simili all'esempio seguente:
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
Distribuire su Azure Spring Apps
Ora che l'applicazione Spring Boot è in esecuzione in locale, è possibile spostarla nell'ambiente di produzione. Azure Spring Apps semplifica la distribuzione di applicazioni Spring Boot in Azure senza modifiche al codice. Il servizio gestisce l'infrastruttura delle applicazioni Spring per consentire agli sviluppatori di concentrarsi sul codice. Azure Spring Apps offre la gestione del ciclo di vita usando monitoraggio e diagnostica completi, gestione della configurazione, individuazione dei servizi, integrazione CI/CD, distribuzioni blu-verde e altro ancora. Per distribuire l'applicazione in Azure Spring Apps, vedere Distribuire la prima applicazione in Azure Spring Apps.