1. Обзор
Spring Framework предоставляет абстракцию ResourceLoader
для легкого чтения и записи файлов из различных источников, таких как файловая система, путь к классам или Интернет. Вам просто нужно указать URI ресурса, используя известный префикс протокола. Например, чтобы получить доступ к файлу в локальной файловой системе, вы должны указать URI, например file:/data/config.yaml
.
Вы напишете приложение Spring Boot, которое будет получать доступ к файлам, хранящимся в облачном хранилище, используя абстракцию Spring Resource и префикс протокола gs:
Вы сделаете это с помощью Cloud Shell и инструмента командной строки Cloud SDK gcloud.
Что вы узнаете
- Как использовать стартер Cloud Storage Spring Boot
- Как получить доступ к файлам в облачном хранилище с помощью Spring
- Как использовать абстракции Spring
Resource
иWritableResource
Что вам понадобится
- Проект Google Cloud
- Браузер, например Google Chrome
- Знакомство со стандартными текстовыми редакторами Linux, такими как Vim, Emacs и GNU Nano.
Как вы будете использовать кодовую лабораторию?
Как бы вы оценили свой опыт создания веб-приложений на HTML и CSS?
Как бы вы оценили свой опыт использования сервисов Google Cloud?
2. Настройка и требования
Самостоятельная настройка среды
- Войдите в Cloud Console и создайте новый проект или повторно используйте существующий. (Если у вас еще нет учетной записи Gmail или G Suite, вам необходимо ее создать .)
Запомните идентификатор проекта — уникальное имя для всех проектов Google Cloud (имя, указанное выше, уже занято и не подойдет вам, извините!). Позже в этой лаборатории он будет называться PROJECT_ID
.
- Далее вам необходимо включить биллинг в Cloud Console, чтобы использовать ресурсы Google Cloud.
Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Обязательно следуйте всем инструкциям в разделе «Очистка», в которых рассказывается, как отключить ресурсы, чтобы вам не приходилось нести расходы, выходящие за рамки этого руководства. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .
Облачная оболочка
Вы будете использовать Cloud Shell , среду командной строки, работающую в Google Cloud.
Активировать Cloud Shell
- В Cloud Console нажмите «Активировать Cloud Shell». .
Если вы никогда раньше не запускали Cloud Shell, вам будет представлен промежуточный экран (ниже сгиба) с описанием того, что это такое. В этом случае нажмите «Продолжить» (и вы больше никогда этого не увидите). Вот как выглядит этот одноразовый экран:
Подготовка и подключение к Cloud Shell займет всего несколько минут.
Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Большую часть, если не всю, работу в этой лаборатории кода можно выполнить с помощью просто браузера или Chromebook.
После подключения к Cloud Shell вы увидите, что вы уже прошли аутентификацию и что для проекта уже установлен идентификатор вашего проекта.
- Выполните следующую команду в Cloud Shell, чтобы подтвердить, что вы прошли аутентификацию:
gcloud auth list
Вывод команды
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
gcloud config list project
Вывод команды
[core] project = <PROJECT_ID>
Если это не так, вы можете установить его с помощью этой команды:
gcloud config set project <PROJECT_ID>
Вывод команды
Updated property [core/project].
3. Создайте файл в облачном хранилище.
После запуска Cloud Shell вы можете начать создавать файлы и переносить их в Cloud Storage.
Создайте файл с именем my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
Затем создайте новую уникальную корзину в Cloud Storage и перенесите туда файл с помощью gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
Перейдите в браузер хранилища в Cloud Storage и убедитесь, что корзина и файл находятся там.
4. Инициализируйте приложение Spring Boot.
Начните писать приложение, используя командную строку для создания нового приложения Spring Boot с помощью 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 -
Обратите внимание, что Initializr автоматически добавит spring-boot-starter-web
и spring-cloud-gcp-starter-storage
к вашим зависимостям в pom.xml
приложения-шаблона.
Перейдите в каталог приложения-шаблона:
$ cd spring-gcs
Убедитесь, что для JAVA_HOME
установлена правильная версия JDK:
$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/
Создайте и запустите приложение с помощью Maven.
$ ./mvnw spring-boot:run
Приложение начнет прослушивать порт 8080. Откройте новую вкладку Cloud Shell и запустите curl
, чтобы получить доступ к приложению.
$ curl localhost:8080
Вы должны получить ответ 404, потому что приложение пока не делает ничего полезного.
Вернитесь на предыдущую вкладку Cloud Shell, где запущено приложение, и закройте его, нажав Control+C
( Command+C
на Macintosh).
5. Прочтите файл в облачном хранилище.
Измените приложение Spring Boot, чтобы получить доступ к my-file.txt
файлу, который вы ранее сохранили в облачном хранилище. Ваша цель — просто вернуть содержимое файла через HTTP.
В следующих инструкциях вы будете использовать Vim для редактирования файлов, но вы также можете использовать Emacs, GNU Nano или встроенный редактор кода в Cloud Shell:
$ cd ~/spring-gcs
Добавьте в приложение REST-контроллер GcsController
.
$ vi src/main/java/com/example/demo/GcsController.java
Вставьте следующий код и не забудьте исправить URI ресурса с помощью корзины, которую вы создали ранее. Вы можете проверить корзину, выполнив команду 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());
}
}
Создайте и запустите приложение с помощью Maven:
$ ./mvnw spring-boot:run
Приложение начнет прослушивать порт 8080. Откройте новую вкладку Cloud Shell и запустите curl
, чтобы получить доступ к приложению.
$ curl localhost:8080
Теперь вы должны увидеть, что содержимое файла возвращено из приложения. Перейдите на предыдущую вкладку Cloud Shell, где запущено приложение, и закройте его, нажав Control+C
( Command+C
на Macintosh).
6. Запишите в файл в облачном хранилище.
Вы читаете содержимое файла в облачном хранилище и предоставляете его через контроллер Spring REST. Теперь измените содержимое файла, отправив новое содержимое файла в ту же конечную точку HTTP.
Вам нужно добавить в GcsController
еще один метод, который будет отвечать на HTTP POST и записывать данные в ваш файл в облачном хранилище. На этот раз примените Spring Resource
к WritableResource
.
Обновите GcsController
добавив необходимые вам дополнительные импортированные данные.
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;
Добавьте новый метод конечной точки в контроллер.
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";
}
...
}
Создайте и запустите приложение с помощью Maven:
$ ./mvnw spring-boot:run
Приложение начнет прослушивать порт 8080. Откройте новую вкладку Cloud Shell и запустите curl
, чтобы отправить сообщение в приложение.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
Вы должны увидеть подтверждение того, что содержимое файла было обновлено. Однако убедитесь в этом, выполнив GET
.
$ curl localhost:8080
Вы должны увидеть обновленное содержимое файла, возвращенного из приложения. Вернитесь на предыдущую вкладку Cloud Shell, где запущено приложение, и закройте его, нажав Control+C
( Command+C
на Macintosh).
7. Поздравляем!
Вы научились использовать абстракцию ресурсов Spring для простого доступа к файлам в облачном хранилище. Вы написали веб-приложение Spring Boot, которое может читать и записывать файлы в облачном хранилище. Вы также узнали о стартовой программе Spring Boot для Cloud Storage, которая обеспечивает эту функциональность.
Узнать больше
- Облачное хранилище
- Spring Framework в Google Cloud
- Spring в репозитории Google Cloud GitHub
- Java в Google Cloud
Лицензия
Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.