1. Descripción general
Spring Framework proporciona una abstracción ResourceLoader
para leer y escribir fácilmente archivos desde varias fuentes, como el sistema de archivos, la ruta de clase o la Web. Solo debes especificar el URI para el recurso usando el prefijo de protocolo conocido. Por ejemplo, para acceder a un archivo en el sistema de archivos local, debes especificar un URI como file:/data/config.yaml
.
Escribirás una app de Spring Boot que accederá a los archivos almacenados en Cloud Storage mediante la abstracción Spring Resource y el prefijo del protocolo gs:
.
Para ello, usarás Cloud Shell y la herramienta de línea de comandos de gcloud del SDK de Cloud.
Qué aprenderás
- Cómo usar el activador Spring Boot de Cloud Storage
- Cómo acceder a archivos en Cloud Storage con Spring
- Cómo usar las abstracciones
Resource
yWritableResource
de Spring
Requisitos
- Un proyecto de Google Cloud
- Un navegador, como Google Chrome
- Conocimientos de editores de texto estándares de Linux, como Vim, Emacs y GNU Nano
¿Cómo usarás el codelab?
¿Cómo calificarías tu experiencia con la compilación de aplicaciones web con HTML y CSS?
¿Cómo calificarías tu experiencia en el uso de los servicios de Google Cloud?
2. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud y crea un proyecto nuevo o reutiliza uno existente. (Si todavía no tienes una cuenta de Gmail o de 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
.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.
Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza” en la que se aconseja cómo cerrar recursos para no incurrir en facturación más allá de este instructivo. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Cloud Shell
Usarás Cloud Shell, un entorno de línea de comandos que se ejecuta en Google Cloud.
Activar Cloud Shell
- En la consola de Cloud, 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.
- 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, puedes configurarlo con el siguiente comando:
gcloud config set project <PROJECT_ID>
Resultado del comando
Updated property [core/project].
3. Crea un archivo en Cloud Storage
Después de que se inicie Cloud Shell, podrás comenzar a crear archivos y transferirlos a Cloud Storage.
Crea un archivo llamado my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
Luego, crea un nuevo bucket único en Cloud Storage y transfiere el archivo allí con gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Navega al navegador de almacenamiento en Cloud Storage y verifica que el bucket y el archivo estén allí.
4. Inicializa una app de Spring Boot
Comienza a escribir la app con la línea de comandos para generar una nueva app de Spring Boot con Spring Initializr:
$ curl https://start.spring.io/starter.tgz \ -d type=maven-project \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
Ten en cuenta que Initializr agregará automáticamente el spring-boot-starter-web
y la spring-cloud-gcp-starter-storage
a tus dependencias en el pom.xml
de la app de plantillas.
Cambia al directorio de la app de plantilla:
$ cd spring-gcs
Asegúrate de que JAVA_HOME
esté configurado en la versión correcta de JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Compila y ejecuta la app con Maven.
$ ./mvnw spring-boot:run
La app comenzará a escuchar en el puerto 8080. Abre una pestaña nueva de Cloud Shell y ejecuta curl
para acceder a la app.
$ curl localhost:8080
Deberías obtener una respuesta 404 porque la app aún no hace nada útil.
Regresa a la pestaña anterior de Cloud Shell en la que se está ejecutando la app y ciérrala con Control+C
(Command+C
en Macintosh).
5. Lee el archivo en Cloud Storage
Modifica la app de Spring Boot para acceder a my-file.txt
, el archivo que almacenaste antes en Cloud Storage. Tu objetivo es simplemente mostrar el contenido del archivo a través de HTTP.
En las siguientes instrucciones, usarás Vim para editar los archivos, pero también puedes usar Emacs, GNU Nano o el editor de código integrado en Cloud Shell:
$ cd ~/spring-gcs
Agrega un controlador de REST GcsController
a la app.
$ vi src/main/java/com/example/demo/GcsController.java
Pega el siguiente código y no olvides corregir el URI del recurso con el bucket que creaste anteriormente. Puedes verificar el bucket mediante la ejecución del comando echo $BUCKET
.
src/main/java/com/example/demo/GcsController.java
package com.example.demo;
import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GcsController {
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
private Resource gcsFile;
@GetMapping("/")
public String readGcsFile() throws IOException {
return StreamUtils.copyToString(
gcsFile.getInputStream(),
Charset.defaultCharset());
}
}
Compila y ejecuta la app con Maven:
$ ./mvnw spring-boot:run
La app comienza a escuchar en el puerto 8080. Abre una pestaña nueva de Cloud Shell y ejecuta curl
para acceder a la app.
$ curl localhost:8080
Ahora, deberías ver que el contenido del archivo mostró la app. Ve a la pestaña anterior de Cloud Shell en la que se está ejecutando la app y ciérrala con Control+C
(Command+C
en Macintosh).
6. Escribir en el archivo en Cloud Storage
Leerás el contenido del archivo en Cloud Storage y lo expusiste a través de un controlador REST de Spring. Ahora, cambia el contenido del archivo publicando el contenido nuevo del archivo en el mismo extremo HTTP.
Debes agregar otro método a GcsController
que responda a HTTP POST y escriba los datos en tu archivo en Cloud Storage. Esta vez, transmite el Resource
de primavera a WritableResource
.
Actualiza GcsController
con las importaciones adicionales que necesites.
src/main/java/com/example/demo/GcsController.java
import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;
Agrega el nuevo método del extremo al controlador.
src/main/java/com/example/demo/GcsController.java
@RestController
public class GcsController {
@PostMapping("/")
String writeGcs(@RequestBody String data) throws IOException {
try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
os.write(data.getBytes());
}
return "file was updated\n";
}
...
}
Compila y ejecuta la app con Maven:
$ ./mvnw spring-boot:run
La app comienza a escuchar en el puerto 8080. Abre una pestaña nueva de Cloud Shell y ejecuta curl
para publicar un mensaje en la app.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Deberías ver una confirmación de que se actualizó el contenido del archivo. Sin embargo, haz un GET
para verificarlo.
$ curl localhost:8080
Deberías ver el contenido actualizado del archivo que muestra la app. Regresa a la pestaña anterior de Cloud Shell en la que se está ejecutando la app y ciérrala con Control+C
(Command+C
en Macintosh).
7. ¡Felicitaciones!
Aprendiste a usar la abstracción de Spring Resource para acceder fácilmente a los archivos en Cloud Storage. Escribiste una app web de Spring Boot que puede leer y escribir en un archivo en Cloud Storage. También aprendiste sobre el activador Spring Boot para Cloud Storage que habilita esa funcionalidad.
Más información
- Cloud Storage
- Framework de Spring en Google Cloud
- Repositorio de GitHub de Spring en Google Cloud
- Java en Google Cloud
Licencia
Este trabajo cuenta con una licencia Atribución 2.0 Genérica de Creative Commons.