Conecta una app de Spring Boot a Cloud SQL

Conecta una app de Spring Boot a Cloud SQL

Acerca de este codelab

subjectÚltima actualización: abr 22, 2020
account_circleEscrito por un Googler

1. Antes de comenzar

Cloud SQL es un servicio de bases de datos completamente administrado que facilita la configuración, el mantenimiento y la administración de sus bases de datos relacionales en Google Cloud. Puedes usar Cloud SQL con Cloud SQL para MySQL o Cloud SQL para PostgreSQL.

En este codelab, aprenderás a configurar una instancia de Cloud SQL para MySQL y luego a actualizar una app de Spring Boot para usar la instancia de Cloud SQL como almacenamiento de backend. Spring Boot Starter para Google Cloud SQL proporciona un DataSource configurado automáticamente, lo que te permite aprovechar fácilmente Cloud SQL con cambios mínimos en tu código. En este codelab, se usa el código fuente de Spring Petclinic.

Requisitos previos

  • Estar familiarizado con el lenguaje y las herramientas de programación de Java
  • Conocimientos de editores de texto estándares de Linux, como Vim, Emacs y nano

Actividades

  • Usa Cloud SQL en tu app de Spring Boot.

Requisitos

2. Configuración y requisitos

Configuración del entorno a su propio ritmo

  1. Accede a Cloud Console y crea un proyecto nuevo o reutiliza uno existente. (Si no tienes una cuenta de Gmail o G Suite, debes crear una).

Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID.

  1. A continuación, debes habilitar la facturación en Cloud Console para usar los recursos de Google Cloud.

Ejecutar este codelab no debería costar más que unos pocos dólares, pero podría ser más si decides usar más recursos o si los dejas en ejecución.

Los usuarios nuevos de Google Cloud son aptos para obtener una prueba gratuita de USD 300.

Activar Cloud Shell

  1. En Cloud Console, haz clic en Activar Cloud Shell .

Si nunca ha iniciado Cloud Shell, aparecerá una pantalla intermedia (debajo de la mitad inferior de la página) que describe qué es. Si ese es el caso, haz clic en Continuar (y no volverás a verlo). Así es como se ve la pantalla única:

El aprovisionamiento y la conexión a Cloud Shell solo tomará unos minutos.

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Gran parte de tu trabajo en este codelab, si no todo, se puede hacer simplemente con un navegador o tu Chromebook.

Una vez conectado a Cloud Shell, debería ver que ya se autenticó y que el proyecto ya se configuró con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que está autenticado:
gcloud auth list

Resultado del 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

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puede configurarlo con este comando:

gcloud config set project <PROJECT_ID>

Resultado del comando

Updated property [core/project].

3. Configura una instancia de Cloud SQL para MySQL

  1. Después de que se inicie Cloud Shell, podrá usar la línea de comandos para crear una nueva instancia de Cloud SQL:
$ gcloud sql instances create my-instance

Una vez que se complete esta operación, tu instancia estará lista para usar.

  1. Ahora, cree una base de datos que usará para la aplicación Petclinic:
$ gcloud sql databases create petclinic --instance my-instance

También puedes acceder a la instancia y configurarla a través de Cloud Console.

  1. Obtén el nombre de la conexión de la instancia en el formato project-id:zone-id:instance-id mediante la ejecución del comando siguiente. La usarás más adelante en la configuración de la app de Spring Boot.
$ gcloud sql instances describe my-instance |grep connectionName

4. Clona y prueba la app de Petclinic de manera local

  1. Ahora clonará y probará la aplicación Petclinic de manera local.
$ git clone https://github.com/spring-projects/spring-petclinic
$ cd spring-petclinic
$ ./mvnw spring-boot:run
  1. En Cloud Shell, haga clic en Vista previa en la Web y, luego, seleccione Vista previa en el puerto 8080.

Debería ver la página principal de Petclinic como se muestra aquí en su navegador:

  1. Juega y agrega datos. La app usa una base de datos HyperSQL en la memoria. Ahora cambiará de HyperSQL a Cloud SQL como base de datos.

5. Use Cloud SQL en Petclinic

Actualice el archivo pom.

Actualiza el archivo pom.xml como se muestra aquí. El activador proporciona un objeto DataSource configurado automáticamente para conectarse a tu base de datos de Cloud SQL. Puede usar Vim, nano o Emacs para editar el archivo.

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>

Actualiza application-mysql.properties

  1. Reemplaza el contenido de src/main/resources/application-mysql.properties por las siguientes propiedades. Debes establecer el nombre de la conexión de la instancia del paso anterior.

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. Por último, agrega un mysql a la propiedad application.properties' spring.profiles.active para habilitar un perfil de Cloud SQL para MySQL en la app de Spring Boot:

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. Ejecuta la app en Cloud Shell

  1. Puedes iniciar la app de Spring Boot normalmente con el complemento de Spring Boot:
$ ./mvnw -DskipTests spring-boot:run
  1. Cuando se inicie la app, haz clic en Vista previa en la Web en la barra de herramientas de Cloud Shell y selecciona Vista previa en el puerto 8080.

Debería ver la página principal de Spring Petclinic nuevamente como se muestra aquí en su navegador:

  1. Agrega una entrada de propietario de una mascota.

Opcional: Verifique que Cloud SQL haya conservado los datos

Puede verificar que los datos que ingresó se conservaron en Cloud SQL, como se muestra aquí. Presiona Intro (volver a Macintosh) cuando se te solicite una contraseña.

$ 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;
  

Opcional: Borra tu instancia de Cloud SQL

Una vez que detienes la app, puedes borrar la instancia de Cloud SQL a través del siguiente comando:

$ gcloud sql instances delete my-instance 

7. Felicitaciones

Aprendiste a conectarte a Cloud SQL en tu app de Spring Boot.

Más información