Conecta una app de Spring Boot a Cloud SQL

1. Antes de comenzar

Cloud SQL es un servicio de base de datos completamente administrado que facilita la configuración, el mantenimiento y la administración de tus bases de datos relacionales en Google Cloud. Puedes usar Cloud SQL con Cloud SQL para MySQL o con 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 su almacenamiento de backend. El activador de Spring Boot para Google Cloud SQL proporciona una DataSource configurada automáticamente, lo que te permite aprovechar Cloud SQL con facilidad, 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 de programación y las herramientas de Java
  • Conocimientos sobre 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 de autoaprendizaje

  1. Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
  • El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como PROJECT_ID). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto.
  • Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.

Activar Cloud Shell

  1. En la consola de Cloud, haz clic en Activar Cloud Shell853e55310c205094.png.

55efc1aaa7a4d3ad.png

Si es la primera vez que inicias Cloud Shell, verás una pantalla intermedia que describe en qué consiste. Si apareció una pantalla intermedia, haz clic en Continuar.

9c92662c6a846a5c.png

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

9f0e51b578fecce5.png

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

Una vez que te conectes a Cloud Shell, deberías ver que estás autenticado y que el proyecto está configurado con tu ID del proyecto.

  1. En Cloud Shell, ejecuta el siguiente comando para confirmar que tienes la autenticación:
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`
  1. Ejecuta el siguiente comando en Cloud Shell para confirmar que el comando de gcloud conoce tu proyecto:
gcloud config list project

Resultado del comando

[core]
project = <PROJECT_ID>

De lo contrario, puedes configurarlo con el siguiente 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ás 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 y configurar la instancia a través de la consola de Cloud.

  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. Lo usarás más adelante para configurar la app de Spring Boot.
$ gcloud sql instances describe my-instance | grep connectionName

4. Clona y prueba la app Petclinic de forma local

  1. Ahora clonarás la app Petclinic de forma local.
$ git clone https://github.com/spring-projects/spring-petclinic

$ cd spring-petclinic
  1. Asegúrate de que esté configurada la versión de Java correcta y ejecuta la app Petclinic de forma local.
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

$ ./mvnw spring-boot:run
  1. En Cloud Shell, haz clic en Vista previa en la Web 1a94d5bd10bfc072.png y, luego, selecciona Vista previa en el puerto 8080.

3aca52f76c6c22a3.png

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

34e0d4f1e1765560.png

  1. Diviértete y agrega datos. La app usa una base de datos de HyperSQL en la memoria. Ahora, pasarás de HyperSQL a usar Cloud SQL como base de datos.

5. Usa Cloud SQL en Petclinic

Actualiza el archivo pom.xml de Maven

Actualiza el archivo pom.xml como se muestra aquí. El activador proporciona un objeto DataSource configurado automáticamente para conectarte a tu base de datos de Cloud SQL. Puedes 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>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>

Actualiza application-mysql.properties

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

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. Por último, habilita un perfil de Cloud SQL para MySQL en la app de Spring Boot agregando mysql a 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

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. Una vez que se inicie la app, haz clic en Vista previa en la Web 1a94d5bd10bfc072.pngen la barra de herramientas de Cloud Shell y, luego, selecciona Vista previa en el puerto 8080.

3aca52f76c6c22a3.png

Deberías volver a ver la página principal de Spring Petclinic, como se muestra aquí en tu navegador:

34e0d4f1e1765560.png

  1. Agrega una entrada de dueño de una mascota.

Opcional: Verifica que Cloud SQL haya conservado los datos

Puedes verificar que los datos que ingresaste se hayan conservado en Cloud SQL, como se muestra aquí. Presiona Intro 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 hayas detenido tu aplicación, puedes borrar la instancia de Cloud SQL con el 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