Создание микрослужбы Spring Boot

Завершено

В этом модуле мы создадим микрослужбу Spring Boot с поддержкой облака. Он использует реестр служб Spring Cloud и сервер конфигурации Spring Cloud, управляемый и поддерживаемый Azure Spring Apps.

Эта микрослужба использует JPA Spring Data для чтения и записи данных из базы данных Azure для Базы данных MySQL :

  • Azure Spring Apps автоматически привязывает базу данных к нашей службе.
  • База данных Azure для MySQL — это полностью управляемая версия MySQL, работающая в Azure.

Создание приложения в Azure Spring Apps

Создайте конкретное todo-service приложение в экземпляре Azure Spring Apps:

az spring app create --name todo-service --resource-group "$RESOURCE_GROUP_NAME" --service "$SPRING_CLOUD_NAME" --runtime-version Java_17

Создание базы данных MySQL

Теперь создайте базу данных Azure для MySQL:

az mysql server create \
    --name ${SPRING_CLOUD_NAME}-mysql \
    --resource-group "$RESOURCE_GROUP_NAME" \
    --sku-name B_Gen5_1 \
    --storage-size 5120 \
    --admin-user "spring"

Эта операция может занять несколько минут и выводит документ JSON: скопируйте атрибут пароля в этом документе, так как мы будем использовать его позже.

Теперь создайте базу данных todos на этом сервере и откройте его брандмауэр, чтобы Azure Spring Apps могли получить к нему доступ:

az mysql db create \
    --name "todos" \
    --server-name ${SPRING_CLOUD_NAME}-mysql
az mysql server firewall-rule create \
    --name ${SPRING_CLOUD_NAME}-mysql-allow-azure-ip \
    --resource-group "$RESOURCE_GROUP_NAME" \
    --server ${SPRING_CLOUD_NAME}-mysql \
    --start-ip-address "0.0.0.0" \
    --end-ip-address "0.0.0.0"

По завершении этой операции можно просмотреть, что было создано в группе ресурсов, созданной для этого семинара.

Привязка базы данных MySQL к приложению

Azure Spring Apps может автоматически привязать базу данных MySQL, созданную к нашей микрослужбе.

  1. Перейдите к экземпляру Azure Spring Apps.

  2. Выберите Приложения.

  3. Выберите приложение todo-service.

  4. Выберите службу Подключение or и нажмите кнопку "Создать".

    1. Для типа службы выберите базу данных для отдельного сервера MySQL.
    2. Укажите имя подключения, например mysql_todos.
    3. Убедитесь, что отображается правильная подписка.
    4. Выберите сервер MySQL, созданный на предыдущих шагах.
    5. Выберите базу данных MySQL, созданную ранее.
    6. Выберите SpringBoot в качестве типа клиента.
    7. Нажмите кнопку "Далее: проверка подлинности ".
  5. На странице проверки подлинности убедитесь, что выбрана строка Подключение ion.

  6. Нажмите кнопку "Продолжить" ... Учетные данные базы данных и заполните поля имени пользователя и пароля. Имя пользователя — spring, и пароль является атрибутом пароля, скопированным ранее.

    Примечание.

    Если вы забыли пароль, его можно сбросить с помощью az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>

  7. Убедитесь, что выбраны правила брандмауэра для включения доступа к целевой службе .

  8. Нажмите кнопку "Далее": просмотр и создание.

  9. После появления сообщения проверки нажмите кнопку "Создать", чтобы создать службу Подключение or.

Создание микрослужбы Spring Boot

Теперь, когда мы подготовили экземпляр Azure Spring Apps и настроили привязку службы, давайте получите код для todo-service подготовки.

Чтобы создать микрослужбу, мы будем использовать https://start.spring.io с командной строкой:

curl https://start.spring.io/starter.tgz -d type=maven-project -d dependencies=web,mysql,data-jpa,cloud-eureka,cloud-config-client -d baseDir=todo-service -d bootVersion=3.1.5.RELEASE -d javaVersion=17 | tar -xzvf -

Примечание.

Мы используем Spring Webкомпоненты , и Spring Data JPAMySQL DriverEureka Discovery ClientConfig Client компоненты.

Добавление кода Spring для управления данными с помощью Spring Data JPA

Вместе с классом DemoApplication создайте сущность JPA Todo:

package com.example.demo;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class Todo {

    public Todo() {
    }

    public Todo(String description, boolean done) {
        this.description = description;
        this.done = done;
    }

    @Id
    @GeneratedValue
    private Long id;

    private String description;

    private boolean done;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isDone() {
        return done;
    }

    public void setDone(boolean done) {
        this.done = done;
    }
}

Затем создайте репозиторий Spring Data JPA для управления этой сущностью, с именем TodoRepository:

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface TodoRepository extends JpaRepository<Todo, Long> {
}

В завершение добавьте контроллер Spring MVC с именем TodoController:

package com.example.demo;

import org.springframework.web.bind.annotation.*;

import javax.annotation.PostConstruct;
import java.util.Arrays;

@RestController
public class TodoController {

    private final TodoRepository todoRepository;

    public TodoController(TodoRepository todoRepository) {
        this.todoRepository = todoRepository;
    }

    @PostConstruct
    public void init() {
        todoRepository.saveAll(Arrays.asList(
                new Todo("First item", true),
                new Todo("Second item", true),
                new Todo("Third item", false)));
    }

    @GetMapping("/")
    public Iterable<Todo> getTodos() {
        return todoRepository.findAll();
    }
}

Настройка Spring Boot для создания таблиц базы данных

Чтобы автоматически создавать таблицы базы данных при развертывании приложения, добавьте следующую строку в файл конфигурации src/main/resources/application.properties:

spring.jpa.hibernate.ddl-auto=create-drop

Развертывание приложения

Теперь вы можете создать проект службы todo-service и отправить его в Azure Spring Apps:

cd todo-service
./mvnw clean package -DskipTests
az spring app deploy --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" --artifact-path target/demo-0.0.1-SNAPSHOT.jar
cd ..

Чтобы проверить журналы приложения, если возникнет сбой, воспользуйтесь командой az spring app logs:

az spring app logs --name todo-service --service "$SPRING_CLOUD_NAME" --resource-group "$RESOURCE_GROUP_NAME" -f

Тестирование проекта в облаке

Теперь, когда приложение развернуто, пришло время протестировать его!

  1. В портал Azure перейдите к приложениям в экземпляре Azure Spring Apps.
    1. Убедитесь, что для todo-gateway для параметра Состояние регистрации отображается значение 0/1. Эта информация показывает, что она правильно зарегистрирована в реестре служб Spring Cloud.
    2. Выберите todo-service, чтобы получить дополнительные сведения о микрослужбе.
  2. Скопируйте и вставьте предоставленную тестовую конечную точку.

Теперь для тестирования конечной точки можно воспользоваться cURL. Команда тестирования должна выглядеть следующим образом:

curl https://primary:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX@azure-spring-cloud-workshop.test.azuremicroservices.io/todo-service/default/

Результатом этой команды должны быть три элемента, которые ранее были вставлены в базу данных MySQL:

[{"id":"1","description":"First item","done":true},{"id":"2","description":"Second item","done":true},{"id":"3","description":"Third item","done":false}]

Проверьте свои знания

1.

Чтобы развернуть микрослужбу Spring Boot в Azure Spring Apps, что необходимо изменить в приложении?

2.

По умолчанию вы можете получить доступ к микрослужбе после его развертывания?