O Spring Framework fornece uma abstração ResourceLoader
para ler e gravar arquivos com facilidade de várias fontes, como o sistema de arquivos, o caminho de classe ou a Web. Basta especificar o URI para o recurso usando um prefixo de protocolo conhecido. Por exemplo, para acessar um arquivo no sistema de arquivos local, especifique um URI como file:/data/config.yaml
.
Você criará um app Spring Boot que acessará os arquivos armazenados no Cloud Storage usando a abstração Spring Resource e o prefixo do protocolo gs:
.
Para fazer isso, você usará o Cloud Shell e a ferramenta de linha de comando gcloud do SDK do Cloud.
O que você aprenderá
- Como usar o inicializador do Spring Boot do Cloud Storage
- Como acessar arquivos no Cloud Storage com o Spring
- Como usar as abstrações
Resource
eWritableResource
do 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ê usará o codelab?
Como você classificaria sua experiência com a criação de apps da Web HTML e CSS?
Como você classificaria sua experiência de uso dos serviços do Google Cloud?
Configuração de ambiente personalizada
Se você ainda não tem uma Conta do Google (Gmail ou Google Apps), crie uma. Faça login no Console do Google Cloud Platform (console.cloud.google.com) e crie um novo projeto:
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, você precisará ativar o faturamento no Console do Cloud para usar os recursos do Google Cloud.
A execução por meio deste codelab terá um custo baixo, mas poderá ser mais se você decidir usar mais recursos ou se deixá-los em execução. Consulte a seção "limpeza" no final deste documento.
Novos usuários do Google Cloud Platform estão qualificados para um teste sem custo financeiro de US$ 300.
Cloud Shell
Você usará o Cloud Shell, um ambiente de linha de comando executado no Google Cloud.
Ativa o Google Cloud Shell
No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:
Em seguida, clique em "Start Cloud Shell":
O provisionamento e a conexão ao ambiente levarão apenas alguns instantes para serem concluídos:
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 laboratório pode ser feito em um navegador ou no seu Google Chromebook.
Depois que você se conectar ao Cloud Shell, sua autenticação já terá sido feita, e o projeto estará definido com seu PROJECT_ID.
Execute o seguinte comando no Cloud Shell para confirmar se a conta está autenticada:
gcloud auth list
Resposta ao comando
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Resposta ao comando
[core] project = <PROJECT_ID>
Se o projeto não estiver configurado, faça a configuração usando este comando:
gcloud config set project <PROJECT_ID>
Resposta ao comando
Updated property [core/project].
Depois que o Cloud Shell for iniciado, você poderá começar a criar arquivos e transferi-los 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 ele usando gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Navegue até o navegador de armazenamento no Cloud Storage e verifique se o bucket e o arquivo estão lá.
Comece a programar o app usando a linha de comando para gerar um novo Spring Boot com o Spring Initializr:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
O Initializr adicionará 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
Crie e execute o app usando o Maven.
$ ./mvnw spring-boot:run
O app começará a detectar na porta 8080. Abra uma nova guia do Cloud Shell e execute curl
para acessar o app.
$ curl localhost:8080
Você receberá uma resposta 404 porque o app ainda não faz nada de útil. Volte para a guia anterior do Cloud Shell em que o app está em execução e elimine-a com Control+C
(Command+C
no Macintosh).
Modifique seu app de inicialização do Spring para acessar my-file.txt
, o arquivo armazenado anteriormente no Cloud Storage. Seu objetivo é simplesmente retornar o conteúdo do arquivo via HTTP.
Nas instruções a seguir, você usará o Vim para editar os arquivos, mas também pode usar o Emacs, 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. Não se esqueça de corrigir o URI do recurso com o bucket criado anteriormente. Verifique o bucket executando o comando echo $BUCKET
.
src/main/java/com/example/demo/GcsController.java (link em inglês)
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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GcsController {
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
private Resource gcsFile;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String readGcsFile() throws IOException {
return StreamUtils.copyToString(
gcsFile.getInputStream(),
Charset.defaultCharset()) + "\n";
}
}
Crie e execute o app com o Maven:
$ ./mvnw spring-boot:run
O app começa a detectar a porta 8080. Abra uma nova guia do Cloud Shell e execute curl
para acessar o app.
$ curl localhost:8080
Você verá que o conteúdo do arquivo voltou do app. Acesse a guia anterior do Cloud Shell em que o app está em execução e elimine-o com Control+C
(Command+C
no Macintosh).
Você lê o conteúdo do arquivo no Cloud Storage e o expõe por meio de um controlador REST do Spring. Agora, altere o conteúdo do arquivo postando o conteúdo novo no mesmo endpoint HTTP.
É necessário adicionar outro método ao GcsController
, que responderá ao HTTP POST e gravará os dados no seu arquivo no Cloud Storage. Desta vez, transmita a Resource
da Spring para WritableResource
.
Atualize o GcsController
com outras importações necessárias.
src/main/java/com/example/demo/GcsController.java (link em inglês)
import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
Adicione o novo método de endpoint ao controlador.
src/main/java/com/example/demo/GcsController.java (link em inglês)
@RestController
public class GcsController {
@RequestMapping(value = "/", method = RequestMethod.POST)
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 a 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ê verá uma confirmação de que o conteúdo do arquivo foi atualizado. No entanto, verifique isso fazendo uma GET
.
$ curl localhost:8080
Você verá o conteúdo atualizado do arquivo retornado do app. Volte para a guia anterior do Cloud Shell em que o app está em execução e elimine-o com Control+C
(Command+C
no Macintosh).
Você aprendeu a usar a abstração Spring Resource para acessar facilmente arquivos no Cloud Storage. Você escreveu um app da Web do Spring Boot que pode ler e gravar em um arquivo no Cloud Storage. Você também aprendeu sobre o Spring Boot Starter para o Cloud Storage.
Saiba mais
- Cloud Storage
- Projeto Spring Cloud do Google Cloud
- Repositório do Spring no Google Cloud GitHub
- Java no Google Cloud
Licença
Este conteúdo está sob a licença Atribuição 2.0 Genérica da Creative Commons.