Bygga en Spring Boot-mikrotjänst

Slutförd

I den här modulen ska vi skapa en molnaktiverad Spring Boot-mikrotjänst. Den använder ett Spring Cloud-tjänstregister och en Spring Cloud Config Server, som både hanteras och stöds av Azure Spring Apps.

Den här mikrotjänsten använder Spring Data JPA för att läsa och skriva data från en Azure-databas för MySQL-databas :

  • Azure Spring Apps binder automatiskt databasen till vår tjänst.
  • Azure Database for MySQL är en fullständigt hanterad version av MySQL som körs på Azure.

Skapa programmet i Azure Spring Apps

Skapa ett specifikt todo-service program i din Azure Spring Apps-instans:

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

Skapa en MySQL-databas

Nu skapar du en Azure Database for MySQL-databas:

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"

Den här åtgärden kan ta några minuter och matar ut ett JSON-dokument: kopiera lösenordsattributet i dokumentet, eftersom vi använder det senare.

Skapa nu en todos-databas på den servern och öppna brandväggen så att Azure Spring Apps kan komma åt den:

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"

När åtgärden har slutförts kan du titta på vad som skapades i den resursgrupp som du skapade för den här studiegruppen.

Binda MySQL-databasen till programmet

Azure Spring Apps kan automatiskt binda den MySQL-databas som vi skapade till vår mikrotjänst.

  1. Gå till din Azure Spring Apps-instans.

  2. Välj Program.

  3. Välj programmet todo-service.

  4. Välj Tjänst Anslut eller och välj sedan + Skapa.

    1. Som Tjänsttyp väljer du DB för Enskild MySQL-server.
    2. Ange ett anslutningsnamn, till exempel mysql_todos.
    3. Kontrollera att rätt prenumeration visas.
    4. Välj den MySQL-server som skapades i föregående steg.
    5. Välj den MySQL-databas som skapades tidigare.
    6. Välj SpringBoot som klienttyp.
    7. Välj knappen Nästa: Autentisering.
  5. På sidan Autentisering kontrollerar du att Anslut ionssträngen är markerad.

  6. Välj Fortsätt med... Databasautentiseringsuppgifter och fyll i fälten användarnamn och lösenord. Användarnamnet är "spring" och lösenordet är det lösenordsattribut som vi kopierade tidigare.

    Kommentar

    Om du glömmer lösenordet kan du återställa det med hjälp av az mysql server update -n ${SPRING_CLOUD_NAME}-mysql -g "$RESOURCE_GROUP_NAME" -p <new-password>

  7. Kontrollera att Konfigurera brandväggsregler för att aktivera åtkomst till måltjänsten har valts.

  8. Klicka på Nästa: Granska + Skapa.

  9. När meddelandet Validering har skickats väljer du knappen Skapa för att skapa tjänstens Anslut eller.

Skapa en Spring Boot-mikrotjänst

Nu när vi har etablerat Azure Spring Apps-instansen och konfigurerat tjänstbindningen ska vi förbereda koden todo-service .

För att skapa vår mikrotjänst använder https://start.spring.io vi med kommandoraden:

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 -

Kommentar

Vi använder komponenterna Spring Web, MySQL Driver, Spring Data JPA, Eureka Discovery Clientoch Config Client .

Lägg till Spring-kod för att hantera data med hjälp av Spring Data MongoDB

Intill klassen DemoApplication skapar du en Todo-JPA-entitet:

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

Sedan skapar du en Spring Data JPA-lagringsplats för hantering av den här entiteten. Lagringsplatsen ska heta TodoRepository:

package com.example.demo;

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

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

Slutför kodningen av det här programmet genom att lägga till en Spring MVC-kontrollant som heter 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();
    }
}

Konfigurera Spring Boot för att skapa databastabellerna

För att databastabellerna ska genereras automatiskt när programmet distribueras lägger du till den här raden i din src/main/resources/application.properties-konfigurationsfil:

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

Distribuera programmet

Nu kan du skapa ditt todo-service-projekt och skicka det till 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 ..

Om du vill kontrollera programmets loggar, ifall något misslyckas, kan du använda kommandot az spring app logs:

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

Testa projektet i molnet

Nu när programmet har distribuerats är det dags att testa det!

  1. I Azure-portalen går du till Appar i din Azure Spring Apps-instans.
    1. Kontrollera att todo-service har registreringsstatusen 0/1. Den här informationen visar att den är korrekt registrerad i Spring Cloud-tjänstregistret.
    2. Välj todo-service för att få mer information om mikrotjänsten.
  2. Kopiera/klistra in den ”testslutpunkt” som tillhandahålls.

Du kan nu använda cURL för att testa slutpunkten. Testkommandot bör se ut så här:

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

Och resultatet av det här kommandot bör bli de tre objekt som tidigare infogades i MySQL-databasen:

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

Testa dina kunskaper

1.

Vad behöver du ändra i ditt program för att distribuera en Spring Boot-mikrotjänst till Azure Spring Apps?

2.

Hur kan du som standard komma åt din mikrotjänst när den har distribuerats?