Erstellen eines Spring Boot-Microservice

Abgeschlossen

In diesem Modul erstellen Sie einen cloudfähigen Spring Boot-Microservice. Dieser verwendet eine Spring Cloud-Dienstregistrierung sowie einen Spring Cloud Config Server, die beide von Azure Spring Apps verwaltet und unterstützt werden.

Dieser Microservice verwendet Spring Data JPA zum Lesen und Schreiben von Daten aus einer Azure Database for MySQL-Datenbank:

  • Azure Spring Apps verbindet diese Datenbank automatisch mit unseren Dienst.
  • Azure Database for MySQL ist eine vollständig verwaltete Version von MySQL, die in Azure ausgeführt wird.

Erstellen der Anwendung in Azure Spring Apps

Erstellen Sie eine bestimmte todo-service-Anwendung in Ihrer Azure Spring Apps-Instanz:

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

Erstellen einer MySQL-Datenbank

Erstellen Sie nun eine Azure Database for MySQL-Instanz:

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"

Dieser Vorgang kann einige Minuten dauern und gibt ein JSON-Dokument aus: Kopieren Sie das Attribut password in diesem Dokument, da Sie es später benötigen.

Erstellen Sie nun eine todos-Datenbank auf diesem Server, und öffnen Sie dessen Firewall, damit Azure Spring Apps auf sie zugreifen kann:

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"

Sobald dieser Vorgang abgeschlossen ist, können Sie sich ansehen, was in der Ressourcengruppe erstellt wurde, die Sie für diesen Workshop erstellt haben.

Binden der MySQL-Datenbank an die Anwendung

Azure Spring Apps kann die erstellte MySQL-Datenbank automatisch an den Microservice binden.

  1. Navigieren Sie zu Ihrer Azure Spring Apps-Instanz.

  2. Wählen Sie Apps aus.

  3. Wählen Sie die Anwendung todo-service aus.

  4. Wählen Sie Dienstconnector und dann + Erstellen aus.

    1. Wählen Sie für Diensttyp den Wert DB für MySQL single server aus.
    2. Geben Sie einen Verbindungsnamen an, z. B. mysql_todos.
    3. Vergewissern Sie sich, dass das richtige Abonnement angezeigt wird.
    4. Wählen Sie den MySQL-Server aus, den Sie in den vorherigen Schritten erstellt haben.
    5. Wählen Sie die zuvor erstellte MySQL-Datenbank aus.
    6. Wählen Sie SpringBoot als Clienttyp aus.
    7. Wählen Sie unten Weiter: Authentifizierung aus.
  5. Überprüfen Sie auf der Seite Authentifizierung, ob Verbindungszeichenfolge ausgewählt ist.

  6. Wählen Sie Weiter... Datenbankanmeldeinformationen aus und füllen Sie die Felder für Benutzername und Kennwort aus. Der Benutzername ist „spring“ und das Kennwort ist das Kennwortattribut, dass Sie zuvor kopiert haben.

    Hinweis

    Sollten Sie Ihr Kennwort vergessen haben, können Sie es mit az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password> zurücksetzen.

  7. Stellen Sie sicher, dass Firewallregeln konfigurieren, um Zugriff auf den Zieldienst zu ermöglichen aktiviert ist.

  8. Klicken Sie auf die Schaltfläche Weiter: Überprüfen + erstellen.

  9. Nachdem die Meldung Prüfung erfolgreich angezeigt wurde, wählen Sie die Schaltfläche Erstellen aus, um den Dienstconnector zu erstellen.

Erstellen eines Spring Boot-Microservice

Nachdem wir nun die Azure Spring Apps-Instanz bereitgestellt und die Dienstbindung konfiguriert haben, können wir den Code für todo-service bereitstellen.

Wir verwenden https://start.spring.io mit der Befehlszeile, um den Microservice zu erstellen:

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 -

Hinweis

Sie verwenden die Komponenten Spring Web, MySQL Driver, Spring Data JPA, Eureka Discovery Client und Config Client.

Hinzufügen von Spring-Code zum Verwalten von Daten mit Spring Data JPA

Erstellen Sie neben der DemoApplication-Klasse eine Todo-JPA-Entität:

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;
    }
}

Erstellen Sie dann ein Spring Data JBA-Repository zum Verwalten dieser Entität namens TodoRepository:

package com.example.demo;

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

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

Das Programmieren dieser Anwendung wird durch das Hinzufügen eines Spring MVC-Controllers namens TodoController abgeschlossen:

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();
    }
}

Konfigurieren von Spring Boot zum Erstellen von Datenbanktabellen

Fügen Sie die folgende Zeile zu Ihrer Konfigurationsdatei src/main/resources/application.properties hinzu, um die Datenbanktabellen automatisch zu generieren, wenn die Anwendung bereitgestellt wird:

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

Bereitstellen der Anwendung

Sie können jetzt Ihr Projekt todo-service erstellen und an Azure Spring Apps senden:

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 ..

Wenn Sie die Protokolle der Anwendung überprüfen möchten, können Sie für den Fall, dass ein Fehler auftritt, den az spring app logs-Befehl verwenden:

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

Testen des Projekts in der Cloud

Nachdem die Anwendung jetzt bereitgestellt wurde, ist es an der Zeit, diese zu testen.

  1. Navigieren Sie im Azure-Portal in Ihrer Azure Spring Apps-Instanz zu Apps.
    1. Überprüfen Sie, ob todo-service den Registrierungsstatus0/1 aufweist. Diese Informationenen geben an, dass die Instanz ordnungsgemäß in der Spring Cloud-Dienstregistrierung registriert ist.
    2. Wählen Sie todo-service aus, um mehr Informationen zum Microservice zu erhalten.
  2. Kopieren Sie den bereitgestellten „Test Endpoint“ (Testendpunkt), und fügen Sie ihn ein.

Sie können jetzt cURL verwenden, um den Endpunkt zu testen. Der Testbefehl sollte wie folgt aussehen:

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

Das Ergebnis dieses Befehls sollten die drei Elemente sein, die zuvor in die MySQL-Datenbank eingefügt wurden:

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

Überprüfen Sie Ihr Wissen

1.

Was müssen Sie in Ihrer Anwendung ändern, um einen Spring Boot-Microservice in Azure Spring Apps bereitzustellen?

2.

Wie können Sie nach der Bereitstellung standardmäßig auf den Microservice zugreifen?