Connettere un'app Spring Boot a Cloud SQL

Cloud SQL è un servizio di database completamente gestito che semplifica la configurazione, 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 a aggiornare un'app di avvio in modo che utilizzi l'istanza Cloud SQL come archiviazione backend. Spring Boot Starter per Google Cloud SQL offre una DataSource configurata automaticamente, che ti consente di usufruire facilmente di Cloud SQL con modifiche minime al codice. Questo codelab utilizza il codice sorgente Spring Petclinic.

Prerequisiti

  • Dimestichezza con gli strumenti e il linguaggio di programmazione Java
  • Conoscenza degli editor di testo standard di Linux, ad esempio Vim, Emacs e nano

Attività previste

  • Utilizza Cloud SQL nell'app Spring Boot.

Che cosa ti serve

Configurazione automatica dell'ambiente

  1. Accedi a Cloud Console e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o G Suite, devi crearne uno.

Ricorda l'ID progetto, un nome univoco in tutti i progetti Google Cloud (il nome sopra riportato è già stato utilizzato e non funzionerà per te). Vi verrà fatto riferimento più avanti in questo codelab come PROJECT_ID.

  1. Il prossimo passaggio consiste nell'attivare la fatturazione in Cloud Console per poter utilizzare le risorse Google Cloud.

L'esecuzione di questo codelab non dovrebbe costare più di qualche euro, ma potrebbe essere di più se decidi di utilizzare più risorse o se le lasci in esecuzione.

I nuovi utenti di Google Cloud sono idonei per una prova senza costi di 300$.

Attiva Cloud Shell

  1. In Cloud Console, fai clic su Attiva Cloud Shell .

Se non hai mai avviato Cloud Shell prima d'ora, ti verrà proposto uno schermo intermedio (below the fold) che descrive quello che è. In tal caso, fai clic su Continua (e non lo vedrai più). Ecco come si presenta la schermata una tantum:

Bastano pochi istanti per eseguire il provisioning e connettersi a Cloud Shell.

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

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già 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`
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].
  1. Una volta avviato Cloud Shell, puoi utilizzare la riga di comando per creare una nuova istanza Cloud SQL:
$ gcloud sql instances create my-instance

Una volta completata l'operazione, l'istanza sarà pronta all'uso.

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

Puoi anche accedere e configurare l'istanza tramite Cloud Console.

  1. Recupera il nome di connessione istanza nel formato project-id:zone-id:instance-id eseguendo il comando seguente. Lo utilizzerai in seguito per configurare l'app Spring Boot.
$ gcloud sql instances describe my-instance |grep connectionName
  1. Ora potrai clonare e testare l'app Petclinic in locale.
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. Fai clic su Anteprima web in Cloud Shell , quindi seleziona Anteprima sulla porta 8080.

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

  1. Interagisci e aggiungi dati. L'app utilizza un database SQL in memoria. Ora passerai da HyperSQL a Cloud SQL come database.

Aggiorna il file pom.xml Maven

Aggiorna il file pom.xml come mostrato qui. Lo starter fornisce un oggetto DataSource configurato automaticamente per connettersi al database Cloud SQL. Puoi utilizzare 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>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-gcp-dependencies</artifactId>
          <version>1.0.0.RC1</version>
          <type>pom</type>
          <scope>import</scope>
          </dependency>
      </dependencies>
    </dependencyManagement>
    <dependencies>
      ...
      <!-- Add CloudSQL Starter for MySQL -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
      </dependency>
      ...
    </dependencies>
    <repositories>
      <!-- Use Spring Milestone Repository -->
      <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestones Repository</name>
        <url>http://repo.spring.io/milestone</url>
      </repository>
    </repositories>
</project>

Aggiornare Application-mysql.properties

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

src/main/resources/application-mysql.properties

database=mysql

# Delete the rest of the original content of the file and replace with the following:
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.
spring.datasource.initialization-mode=always
  1. Infine, abilita un profilo Cloud SQL per MySQL nell'app Spring Boot aggiungendo mysql alla proprietà application.properties' 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
  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 nella barra degli strumenti di Cloud Shell, quindi seleziona Anteprima sulla porta 8080.

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

  1. Aggiungi una voce per il proprietario dell'animale domestico.

Facoltativo: verifica che Cloud SQL abbia mantenuto i dati

Puoi verificare che i dati inseriti siano stati resi persistenti a Cloud SQL come mostrato qui. Premi Invio (Invio su Macintosh) quando viene richiesta una 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: eliminazione dell'istanza Cloud SQL

Dopo aver arrestato l'app, puoi eliminare l'istanza Cloud SQL utilizzando il seguente comando:

$ gcloud sql instances delete my-instance 

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

Scopri di più