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 SQL Database usando Spring Data JDBC.
JDBC è l'API standard Java per connettersi ai database relazionali tradizionali.
In questa esercitazione sono inclusi due metodi di autenticazione: autenticazione Microsoft Entra e autenticazione del database SQL. La scheda Senza password mostra l'autenticazione Microsoft Entra e la scheda Password mostra l'autenticazione del database SQL.
Microsoft Entra autenticazione è un meccanismo per la connessione ad Azure Database per SQL Database 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 del database SQL utilizza account archiviati nel database SQL. Se si sceglie di usare le password come credenziali per gli account, queste credenziali verranno archiviate nella tabella utente. Poiché queste password vengono archiviate in database SQL, è necessario gestire manualmente la rotazione delle password.
Prerequisiti
Una sottoscrizione Azure - crearne una gratuitamente.
Java Development Kit (JDK) versione 8 o successiva.
ODBC Driver 17 o 18.
Se non è disponibile, creare un'istanza di Azure SQL Server denominata
sqlserverteste un database denominatodemo. Per istruzioni, vedere Quickstart: Creare un database singolo - Azure SQL Database.Se non si ha un'applicazione Spring Boot, creare un progetto Maven con Spring Initializr. Assicurarsi di selezionare Maven Project e, in Dependencies, aggiungere Spring Web, Spring Data JDBC e MS SQL Server Driver e quindi selezionare Java versione 8 o successiva.
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-jdbc-sql-server.
Configurare una regola del firewall per il server Azure SQL Database
Le istanze di Azure SQL Database 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 Tutorial: Proteggere un database in Azure SQL Database.
Se ci si connette al server Azure SQL Database da Windows Subsystem for Linux (WSL) in un computer Windows, è necessario aggiungere l'ID host WSL al firewall.
Creare un utente non amministratore del database SQL e concedere l'autorizzazione
Questo passaggio creerà un utente non amministratore e concederà tutte le autorizzazioni per il demo database.
Per usare connessioni senza password, vedere Tutorial: Proteggere un database in Azure SQL Database o usare Service Connector per creare un utente amministratore Microsoft Entra per il server Azure SQL Database, come illustrato nei passaggi seguenti:
Installare innanzitutto l'estensione Service Connector senza password per il Azure CLI:
az extension add --name serviceconnector-passwordless --upgradeUsare quindi il comando seguente per creare l'Microsoft Entra utente non amministratore:
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
L'amministratore Microsoft Entra creato è un utente amministratore del database SQL, quindi non è necessario creare un nuovo utente.
Importante
Le connessioni senza password al database Azure SQL richiedono l'aggiornamento di MS SQL Server Driver alla versione 12.1.0 o successiva. L'opzione di connessione è authentication=DefaultAzureCredential in versione 12.1.0 e authentication=ActiveDirectoryDefault nella versione 12.2.0.
Archiviare dati da Azure SQL Database
Con un'istanza di Azure SQL Database è possibile archiviare i dati usando Spring Cloud Azure.
Per installare il modulo Spring Cloud Azure Starter, 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 Spring Cloud Azure Starter:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter</artifactId> </dependency>Nota
Poiché si tratta di una dipendenza, deve essere aggiunta nella
<dependencies>sezione del pom.xml. La versione non è configurata qui, perché è gestita dalla distinta base che abbiamo aggiunto in precedenza.
Configurare Spring Boot per l'uso di Azure SQL Database
Per archiviare dati da Azure SQL Database usando Spring Data JDBC, seguire questa procedura per configurare l'applicazione:
Configurare le credenziali di Azure SQL Database nel file di configurazione 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=alwaysAvviso
La proprietà
spring.sql.init.mode=alwaysdi configurazione indica che Spring Boot genererà automaticamente uno schema di database, usando il file schema.sql che verrà creato successivamente, ogni volta che il server viene avviato. Questa proprietà è ideale per i test, ma tenere presente che eliminerà i dati a ogni riavvio, quindi non dovrebbe essere usata in produzione.
Creare il file di configurazione src/main/resources/schema.sql per configurare lo schema del database, quindi aggiungere il contenuto seguente.
DROP TABLE IF EXISTS todo; CREATE TABLE todo (id INT IDENTITY PRIMARY KEY, description VARCHAR(255), details VARCHAR(4096), done BIT);
Creare una nuova classe
TodoJava. Questa classe è un modello di dominio mappato allatodotabella che verrà creato automaticamente da Spring Boot. Il codice seguente ignora igettersmetodi esetters.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; }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.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> { }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. L'applicazione archivia i dati nel database. Verranno visualizzati log simili all'esempio seguente:
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
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.