1. Visão geral
O Spring Framework oferece uma abstração ResourceLoader para ler e gravar arquivos com facilidade de várias fontes, como sistema de arquivos, classpath ou Web. Basta especificar o URI do recurso usando o prefixo de protocolo conhecido. Por exemplo, para acessar um arquivo no sistema de arquivos local, especifique um URI como file:/data/config.yaml.
Você vai escrever um app Spring Boot que acessará arquivos armazenados no Cloud Storage usando a abstração Spring Resource e o prefixo do protocolo gs:.
Para isso, use o Cloud Shell e a ferramenta de linha de comando gcloud do SDK Cloud.
O que você vai aprender
- Como usar o Spring Boot Starter do Cloud Storage
- Como acessar arquivos no Cloud Storage com o Spring
- Como usar as abstrações
ResourceeWritableResourcedo Spring
O que é necessário
- um projeto do Google Cloud;
- Um navegador, como o Google Chrome
- Conhecer os editores de texto padrão do Linux, como Vim, Emacs e GNU Nano
Como você vai usar o codelab?
Como você classificaria sua experiência com a criação de apps da Web em HTML e CSS?
Como você classificaria sua experiência de uso dos serviços do Google Cloud?
2. Configuração e requisitos
Configuração de ambiente autoguiada
- Faça login no Console do Cloud e crie um novo projeto ou reutilize um existente. Crie uma se você ainda não tiver uma conta do Gmail ou do G Suite.
Lembre-se do código do projeto, um nome exclusivo em todos os projetos do Google Cloud. O nome acima já foi escolhido e não servirá para você. Faremos referência a ele mais adiante neste codelab como PROJECT_ID.
- Em seguida, será necessário ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução deste codelab não será muito cara, se for o caso. Siga todas as instruções na seção "Limpeza", que orienta você sobre como encerrar recursos para não incorrer em cobranças além deste tutorial. Novos usuários do Google Cloud estão qualificados para o programa de US$ 300 de avaliação sem custos.
Cloud Shell
Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
Ativar o Cloud Shell
- No Console do Cloud, clique em Ativar o Cloud Shell
.
Se você nunca tiver iniciado o Cloud Shell, verá uma tela intermediária (abaixo da dobra) com a descrição do que ele é. Se esse for o caso, clique em Continuar e você não o verá novamente. Esta é uma tela única:
Leva apenas alguns instantes para provisionar e se conectar ao Cloud Shell.
Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Praticamente todo o seu trabalho neste codelab pode ser feito em um navegador ou no seu Chromebook.
Depois de se conectar ao Cloud Shell, você já estará autenticado e o projeto já estará configurado com seu ID do projeto.
- Execute o seguinte comando no Cloud Shell para confirmar que você está autenticado:
gcloud auth list
Resposta ao 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
Resposta ao comando
[core] project = <PROJECT_ID>
Se o projeto não estiver configurado, configure-o usando este comando:
gcloud config set project <PROJECT_ID>
Resposta ao comando
Updated property [core/project].
3. Criar um arquivo no Cloud Storage
Depois que o Cloud Shell for iniciado, você poderá começar a criar e transferir arquivos para o Cloud Storage.
Crie um arquivo chamado my-file.txt:
$ echo "Hello World from GCS" > my-file.txt
Em seguida, crie um novo bucket exclusivo no Cloud Storage e transfira o arquivo para lá usando gsutil.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Acesse o navegador de armazenamento no Cloud Storage e verifique se o bucket e o arquivo estão lá.
4. Inicializar um app Spring Boot
Comece a escrever o app usando a linha de comando para gerar um novo app Spring Boot com o 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 -
O Initializr adiciona automaticamente spring-boot-starter-web e spring-cloud-gcp-starter-storage às dependências no pom.xml do app de modelo.
Mude para o diretório do app de modelo:
$ cd spring-gcs
Verifique se JAVA_HOME está definido com a versão correta do JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Crie e execute o app usando o Maven.
$ ./mvnw spring-boot:run
O app vai começar a detectar atividades na porta 8080. Abra uma nova guia do Cloud Shell e execute curl para acessar o app.
$ curl localhost:8080
Você vai receber uma resposta 404 porque o app ainda não faz nada de útil.
Volte para a guia anterior do Cloud Shell, onde o app está sendo executado, e encerre-o com Control+C (Command+C no Macintosh).
5. Ler o arquivo no Cloud Storage
Modifique o app Spring Boot para acessar my-file.txt, o arquivo que você armazenou anteriormente no Cloud Storage. Sua meta é simplesmente retornar o conteúdo do arquivo via HTTP.
Nas instruções a seguir, você vai usar o Vim para editar os arquivos, mas também pode usar o Emacs, o GNU Nano ou o editor de código integrado no Cloud Shell:

$ cd ~/spring-gcs
Adicione um controlador REST GcsController ao app.
$ vi src/main/java/com/example/demo/GcsController.java
Cole o código a seguir e não se esqueça de corrigir o URI do recurso com o bucket que você criou anteriormente. Para verificar o bucket, execute o 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());
}
}
Crie e execute o app com o Maven:
$ ./mvnw spring-boot:run
O app começa a detectar atividades na porta 8080. Abra uma nova guia do Cloud Shell e execute curl para acessar o app.
$ curl localhost:8080
Agora você vai ver que o conteúdo do arquivo foi retornado do app. Acesse a guia anterior do Cloud Shell em que o app está sendo executado e encerre-o com Control+C (Command+C no Macintosh).
6. Gravar no arquivo do Cloud Storage
Você lê o conteúdo do arquivo no Cloud Storage e o expõe por um controlador REST do Spring. Agora, mude o conteúdo do arquivo postando o novo conteúdo no mesmo endpoint HTTP.
Você precisa adicionar outro método a GcsController que responda a HTTP POST e grave os dados no arquivo do Cloud Storage. Desta vez, faça o cast do Spring Resource para WritableResource.
Atualize o GcsController com as importações adicionais necessárias.
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;
Adicione o novo método de endpoint ao 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";
}
...
}
Crie e execute o app com o Maven:
$ ./mvnw spring-boot:run
O app começa a detectar atividades na porta 8080. Abra uma nova guia do Cloud Shell e execute curl para postar uma mensagem no app.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Você vai receber uma confirmação de que o conteúdo do arquivo foi atualizado. No entanto, verifique isso fazendo um GET.
$ curl localhost:8080
O conteúdo atualizado do arquivo retornado do app vai aparecer. Volte à guia anterior do Cloud Shell em que o app está sendo executado e encerre-o com Control+C (Command+C no Macintosh).
7. Parabéns!
Você aprendeu a usar a abstração Spring Resource para acessar arquivos no Cloud Storage com facilidade. Você escreveu um app da Web Spring Boot que pode ler e gravar em um arquivo no Cloud Storage. Você também aprendeu sobre o Spring Boot Starter para Cloud Storage, que ativa essa funcionalidade.
Saiba mais
- Cloud Storage
- Framework Spring no Google Cloud
- Repositório do Spring no Google Cloud no GitHub
- Java no Google Cloud
Licença
Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.