connetti un'app Spring Boot a Cloud SQL

1. Prima di iniziare

Cloud SQL è un servizio di database completamente gestito che semplifica la configurazione, la manutenzione, la gestione e l'amministrazione dei database relazionali su Google Cloud. Puoi utilizzare Cloud SQL con Cloud SQL per MySQL o Cloud SQL per PostgreSQL.

In questo codelab, imparerai a configurare un'istanza Cloud SQL per MySQL e quindi ad aggiornare un'app Spring Boot in modo che utilizzi l'istanza Cloud SQL come spazio di archiviazione del backend. Spring Boot Starter per Google Cloud SQL fornisce un valore DataSource autoconfigurato, che ti consente di sfruttare facilmente Cloud SQL con modifiche minime al codice. Questo codelab utilizza il codice sorgente di Spring Petclinic.

Prerequisiti

  • Familiarità con il linguaggio di programmazione e gli strumenti Java
  • Conoscenza degli editor di testo standard Linux, quali Vim, Emacs e nano

Attività previste

  • Utilizza Cloud SQL nell'app Spring Boot.

Che cosa ti serve

2. Configurazione e requisiti

Configurazione dell'ambiente da seguire in modo autonomo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarla.
  • L'ID progetto è univoco in tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca. di solito non ti importa cosa sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti soddisfa, potresti generarne un altro casuale. In alternativa, puoi provarne una personalizzata per verificare se è disponibile. Non può essere modificato dopo questo passaggio e rimane per tutta la durata del progetto.
  • Per informazione, c'è un terzo valore, un numero di progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare risorse/API Cloud. L'esecuzione di questo codelab non ha alcun costo. Per arrestare le risorse ed evitare di incorrere in fatturazione dopo questo tutorial, puoi eliminare le risorse che hai creato o eliminare il progetto. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Attiva Cloud Shell

  1. Dalla console Cloud, fai clic su Attiva Cloud Shell 853e55310c205094.png.

55efc1aaa7a4d3ad.png

Se è la prima volta che avvii Cloud Shell, ti verrà mostrata una schermata intermedia che descrive di cosa si tratta. Se ti è stata presentata una schermata intermedia, fai clic su Continua.

9c92662c6a846a5c.png

Il provisioning e la connessione a Cloud Shell dovrebbero richiedere solo qualche istante.

9f0e51b578fecce5.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita in Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Gran parte, se non tutto, del lavoro in questo codelab può essere svolto con un browser.

Una volta stabilita la connessione a Cloud Shell, dovresti vedere che hai eseguito l'autenticazione e che il progetto è impostato sul tuo ID progetto.

  1. Esegui questo comando in Cloud Shell per verificare che l'account sia autenticato:
gcloud auth list

Output comando

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Esegui questo comando in Cloud Shell per confermare che il comando gcloud è a conoscenza del tuo progetto:
gcloud config list project

Output comando

[core]
project = <PROJECT_ID>

In caso contrario, puoi impostarlo con questo comando:

gcloud config set project <PROJECT_ID>

Output comando

Updated property [core/project].

3. Configura un'istanza Cloud SQL per MySQL

  1. Dopo l'avvio di Cloud Shell, puoi utilizzare la riga di comando per creare una nuova istanza Cloud SQL:
$ gcloud sql instances create my-instance

Al termine dell'operazione, l'istanza sarà pronta per l'uso.

  1. Ora crea un database che utilizzerai per l'app Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

Puoi anche accedere all'istanza e configurarla tramite la console Cloud.

  1. Esegui questo comando per ottenere il nome della connessione dell'istanza nel formato project-id:zone-id:instance-id. Lo utilizzerai più tardi per configurare l'app Spring Boot.
$ gcloud sql instances describe my-instance | grep connectionName

4. Clona e testa l'app Petclinic in locale

  1. Ora clonerai l'app Petclinic in locale.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. Assicurati che sia impostata la versione Java corretta ed esegui l'app Petclinic in locale.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. Fai clic su Anteprima web 1a94d5bd10bfc072.png in Cloud Shell , quindi seleziona Anteprima sulla porta 8080.

3aca52f76c6c22a3.png

Dovresti vedere la home page di Petclinic come mostrato qui nel tuo browser:

34e0d4f1e1765560.png

  1. Sperimenta e aggiungi dati. L'app utilizza un database HyperSQL in memoria. Ora passerai da HyperSQL all'utilizzo di Cloud SQL come database.

5. Utilizza Cloud SQL in Petclinic

Aggiorna il file Maven pom.xml

Aggiorna il file pom.xml come mostrato qui. Il comando iniziale fornisce un oggetto DataSource autoconfigurato per la connessione al database Cloud SQL. Puoi usare Vim, nano o Emacs per modificare il file.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
    ...
    <!-- Add Spring Cloud GCP Dependency BOM -->
    <dependencyManagement>
        <dependencies>
          <dependency>
          <groupId>com.google.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>4.1.4</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
</project>

Aggiorna application-mysql.properties

  1. Sostituisci i contenuti di src/main/resources/application-mysql.properties con le seguenti proprietà. Dovrai impostare il nome della connessione istanza nel passaggio precedente.

src/main/resources/application-mysql.properties

database=mysql

spring.cloud.gcp.sql.database-name=petclinic
spring.cloud.gcp.sql.instance-connection-name=YOUR_CLOUD_SQL_INSTANCE_CONNECTION_NAME

# Initialize the database since the newly created Cloud SQL database has no tables. The following flag is for Spring Boot 2.5+.
spring.sql.init.mode=always  

  1. Infine, abilita un profilo Cloud SQL per MySQL nell'app Spring Boot aggiungendo mysql a application.properties Proprietà spring.profiles.active:

src/main/resources/application.properties

# Keep the content of the file the same
...

# In the last line, add mysql to the spring.profiles.active property
spring.profiles.active=mysql

6. Esegui l'app in Cloud Shell

  1. Puoi avviare l'app Spring Boot normalmente con il plug-in Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Una volta avviata l'app, fai clic su Anteprima web 1a94d5bd10bfc072.pngnella barra degli strumenti di Cloud Shell, quindi seleziona Anteprima sulla porta 8080.

3aca52f76c6c22a3.png

Dovresti vedere di nuovo la home page di Spring Petclinic come mostrato qui nel tuo browser:

34e0d4f1e1765560.png

  1. Aggiungi una voce del proprietario dell'animale domestico.

(Facoltativo) Verifica che Cloud SQL abbia reso persistenti i dati

Puoi verificare che i dati inseriti siano stati resi persistenti in Cloud SQL, come mostrato qui. Premi Invio quando viene richiesta la password.

$ gcloud sql connect my-instance -u root
Whitelisting your IP for incoming connection for 5 minutes...done.
Enter password: <Press Enter, there is no password by default>
...
mysql> use petclinic;
mysql> select * from owners;

(Facoltativo) Elimina l'istanza Cloud SQL

Una volta arrestata l'app, puoi eliminare l'istanza Cloud SQL utilizzando il seguente comando:

$ gcloud sql instances delete my-instance

7. Complimenti

Hai imparato a connetterti a Cloud SQL nella tua app Spring Boot.

Scopri di più