Tworzenie mikrousługi środowiska Spring Boot

Ukończone

W tym module utworzymy mikrousługę spring boot z obsługą chmury. Korzysta z rejestru usług Spring Cloud i serwera Spring Cloud Config Server, które są zarządzane i obsługiwane przez usługę Azure Spring Apps.

Ta mikrousługa używa narzędzia Spring Data JPA do odczytywania i zapisywania danych z bazy danych azure database for MySQL :

  • Usługa Azure Spring Apps automatycznie wiąże bazę danych z naszą usługą.
  • Azure Database for MySQL to w pełni zarządzana wersja programu MySQL działająca na platformie Azure.

Tworzenie aplikacji w usłudze Azure Spring Apps

Utwórz określoną todo-service aplikację w wystąpieniu usługi Azure Spring Apps:

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

Tworzenie bazy danych MySQL

Teraz utwórz usługę Azure Database for 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"

Ta operacja może potrwać kilka minut, a dane wyjściowe dokumentu JSON: skopiuj atrybut hasła w tym dokumencie, ponieważ użyjemy go później.

Teraz utwórz bazę danych todos na tym serwerze i otwórz zaporę, aby usługa Azure Spring Apps mogła uzyskać do niej dostęp:

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"

Po zakończeniu tej operacji możesz zapoznać się z tym, co zostało utworzone w grupie zasobów powstałej w trakcie tych warsztatów.

Tworzenie powiązania bazy danych MySQL z aplikacją

Usługa Azure Spring Apps może automatycznie powiązać bazę danych MySQL utworzoną z naszą mikrousługą.

  1. Przejdź do wystąpienia usługi Azure Spring Apps.

  2. Wybierz Aplikacje.

  3. Wybierz aplikację todo-service.

  4. Wybierz pozycję Łącznik usługi, a następnie wybierz pozycję + Utwórz.

    1. W polu Typ usługi wybierz pozycję DB for MySQL single server (Baza danych dla pojedynczego serwera MySQL).
    2. Określ nazwę połączenia, na przykład mysql_todos.
    3. Sprawdź, czy jest wyświetlana poprawna subskrypcja.
    4. Wybierz serwer MySQL utworzony w poprzednich krokach.
    5. Wybierz utworzoną wcześniej bazę danych MySQL.
    6. Wybierz pozycję SpringBoot jako typ klienta.
    7. Wybierz przycisk Dalej: Uwierzytelnianie.
  5. Na stronie Uwierzytelnianie sprawdź, czy wybrano parametry połączenia.

  6. Wybierz pozycję Kontynuuj z... Poświadczenia bazy danych i wypełnij pola nazwy użytkownika i hasła. Nazwa użytkownika to "spring", a hasło to atrybut hasła skopiowany wcześniej.

    Uwaga

    Jeśli zapomnisz hasło, możesz je zresetować przy użyciu polecenia az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>

  7. Sprawdź, czy wybrano pozycję Skonfiguruj reguły zapory, aby włączyć dostęp do usługi docelowej.

  8. Kliknij pozycję Dalej: Przejrzyj i utwórz.

  9. Po pojawieniu się komunikatu Weryfikacja przekazana wybierz przycisk Utwórz , aby utworzyć łącznik usługi.

Tworzenie mikrousługi środowiska Spring Boot

Teraz, gdy aprowizowaliśmy wystąpienie usługi Azure Spring Apps i skonfigurowaliśmy powiązanie usługi, pobierzmy kod do todo-service przygotowania.

Aby utworzyć naszą mikrousługę, użyjemy polecenia https://start.spring.io w wierszu polecenia:

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 -

Uwaga

Używamy składników Spring Web, , MySQL DriverSpring Data JPA, Eureka Discovery Client, i Config Client .

Dodawanie kodu Spring w celu zarządzania danymi przy użyciu repozytorium Spring Data JPA

Obok klasy DemoApplication utwórz jednostkę 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;
    }
}

Następnie utwórz repozytorium Spring Data JPA o nazwie TodoRepository, aby zarządzać tą jednostką:

package com.example.demo;

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

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

Zakończ tworzenie kodu tej aplikacji, dodając kontroler Spring MVC o nazwie 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();
    }
}

Konfigurowanie platformy Spring Boot na potrzeby tworzenia tabel bazy danych

Aby automatycznie generować tabele bazy danych podczas wdrażania aplikacji, dodaj ten wiersz do pliku konfiguracji src/main/resources/application.properties:

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

Wdrażanie aplikacji

Teraz możesz skompilować projekt zadań do wykonania i wysłać go do usługi 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 ..

Jeśli chcesz sprawdzić dzienniki aplikacji w przypadku niepowodzenia, możesz użyć polecenia az spring app logs:

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

Testowanie projektu w chmurze

Teraz, gdy aplikacja jest wdrożona, czas na jej przetestowanie.

  1. W witrynie Azure Portal przejdź do pozycji Aplikacje w wystąpieniu usługi Azure Spring Apps.
    1. Sprawdź, czy usługa todo-service ma stan rejestracji z informacją 0/1. Te informacje pokazują, że jest on poprawnie zarejestrowany w rejestrze usług Spring Cloud.
    2. Wybierz pozycję todo-service, aby uzyskać więcej informacji na temat mikrousługi.
  2. Skopiuj/wklej podany element „Testowy punkt końcowy”.

Teraz możesz użyć narzędzia cURL do przetestowania punktu końcowego. Polecenie do testowania powinno wyglądać następująco:

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

Wynikiem tego polecenia powinny być natomiast trzy elementy, które zostały wcześniej wstawione do bazy danych MySQL:

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

Sprawdź swoją wiedzę

1.

Co należy zmienić w aplikacji, aby wdrożyć mikrousługę Spring Boot w usłudze Azure Spring Apps?

2.

Domyślnie jak można uzyskać dostęp do mikrousługi po jej wdrożeniu?