[JAVA] Erstellen Sie mit Spring Boot einen Mikrodienst

Einführung

Einige der Projekte, an denen ich beteiligt war, haben zuvor eine Architektur namens Microservices übernommen. Es scheint, dass das Wort "Mikrodienst" schon lange sehr beliebt ist, aber damals wusste ich nichts davon, und ich erinnere mich, dass mir das Missverständnis, dass es sich um einen Microsoft-Dienst handelte, peinlich war. Doch selbst zu dieser Zeit beendete ich die Entwicklung aufgrund der Geschäftigkeit des Projekts mit einem vagen Verständnis, so dass ich ein Gefühl der Krise verspürte, wenn ich alles so wie es war völlig vergaß und mich entschied, hart zu lernen. Ich habe zuvor einen Dienst mit Java und Spring Boot erstellt, aber dieses Mal möchte ich einen Mikrodienst in einer ähnlichen Umgebung wie eine Überprüfung erstellen. Es ist ein sehr einfach zu erstellender REST-Service.

Was ist ein Mikrodienst?

Die Erklärung, die ich erhielt, war, dass ich im Gegensatz zu herkömmlichen Anwendungen (es scheint monolithische Anwendungen zu sein), bei denen eine Anwendung alle Funktionen hat, mehrere kleine (Mikro-) Dienste einzeln entwickelt habe. Es war, als würde man zusammenarbeiten, um ein großes System zu schaffen. Mit anderen Worten, Microservices sind im weitesten Sinne eine Methode zur Softwareerstellung. Der auf dieser Idee basierende Dienst wurde auch als Mikrodienst bezeichnet.

Zu dieser Zeit war ich davon überzeugt, dass es verständlich ist, aber je mehr ich nachschaute, desto mehr unterschieden sich die Erklärungen von Person zu Person geringfügig, und es fiel mir schwer, die Definition von Mikrodiensten zu verstehen. Das sollte es sein, Microservice ist ein sogenanntes Schlagwort, und es scheint, dass es keine strenge Definition gibt. Unter diesen sind die Merkmale, die häufig erwähnt werden, wie folgt.

-Jeder Dienst kann unabhängig bereitgestellt werden -Jeder Dienst arbeitet in einem Prozess und kommuniziert mit einer Lightweight-API (HTTP usw.) ・ Dienstleistungen sind aus geschäftlicher Sicht unterteilt ・ Jeder Dienst wird automatisch bereitgestellt ・ Beseitigen Sie die zentrale Verwaltung so weit wie möglich. Kontrollieren Sie nicht Sprache, DB, Entwicklungsteam (kurz gesagt, jeder Dienst kann in einer anderen Programmiersprache usw. geschrieben werden)

verdienen

Ich werde hier nicht viel darauf eingehen, aber wenn Sie sich die Vorteile der Entwicklung von Microservices ansehen, werden Sie viel sehen. Als ich mich tatsächlich entschied, einen Dienst zu erstellen, wurden die meisten anderen Dienste in der Sprache go entwickelt. Natürlich wurde mir auch gesagt, ich solle mich in derselben Sprache entwickeln, es sei denn, es gab einen besonderen Grund, aber zu diesem Zeitpunkt hatte ich es nie angerührt: "Ich kann es während des Studiums nicht implementieren, obwohl der Liefertermin nahe ist. Als Ergebnis des Knetens von "Desu" mit aller Kraft wurde mir mit einem bitteren Lächeln, der Erlaubnis, mit Java zu entwickeln, dass ich es gewohnt war zu schreiben, und dem Erstellen einer Umgebung gesagt. Diese Art von Selbstsucht ging vorbei

Beseitigen Sie die zentrale Verwaltung so weit wie möglich. Kontrollieren Sie nicht Sprache, DB, Entwicklungsteam

Ich denke, dies ist einer der Vorteile von Microservices. Da es sich bei jedem um einen lose gekoppelten Dienst handelt, würde ich gerne etwas Neues ausprobieren, aber ich habe ein wenig Angst. Selbst in solchen Fällen können Sie einen Dienst mit geringem Risiko auswählen und ausprobieren.

Fehler

Natürlich gibt es verschiedene Nachteile. Durch die Aufteilung des Dienstes ist jeder Dienst einfach, aber insgesamt wird er sehr kompliziert. Ebenfalls, ・ Sie können für jeden Dienst in verschiedenen Sprachen schreiben. ・ Einfache neue Technologie ausprobieren In Bezug auf die als Verdienste genannten Punkte ist es gut, wenn ein neuer entwickelt wird, aber wenn es um die Wartung geht, scheint dies ein Nachteil zu sein, da es notwendig ist, Ingenieure zu sammeln, die mit jedem einzelnen umgehen können.

Was ist Spring Boot?

Es ist ein Framework zum einfachen Erstellen von Webanwendungen mit dem Spring Framework, einem Java-Framework. Da die Ausführungsdatei einen Webcontainer (Tomcat oder Jetty) enthält, kann sie als eine Anwendung gestartet werden, ohne einen separaten Webserver vorzubereiten.

Bereiten Sie eine Entwicklungsumgebung vor

Installieren Sie Java und Maven, um sie in Java zu erstellen. (Ich habe den Vorgang mit JDK1.8 bestätigt.) Der PC, den ich benutzte, war ein Mac, also war ↓ hilfreich. https://qiita.com/amemolee/items/6f33b8e321cc9395b0cf

Installieren Sie die Spring Tool Suite (STS). STS ist eine integrierte Entwicklungsumgebung, die auf die Entwicklung des Spring Framework spezialisiert ist. Die Basis ist Eclipse. Die grundlegende Operationsmethode ist fast Eclipse. Herunterladen und installieren von ↓. https://spring.io/tools

Ich möchte die erstellte Anwendung mit Docker ausführen, also werde ich Docker einfügen. https://docs.docker.com/docker-for-mac/install/

Meine Umgebung ist übrigens wie folgt. ・ JDK 1.8 ・ Maven 3.6.0 ・ Spring Tool Suite 4.0.1

Einen Service erstellen

Dann werde ich es sofort schaffen.

Ein Projekt erstellen

  1. Wählen Sie nach dem Öffnen von STS Datei> Neu> Spring Starter Project.
  2. Legen Sie einen Projektnamen und ein Paket fest und klicken Sie auf "Weiter". スクリーンショット 2018-12-16 18.57.53.png
  3. Aktivieren Sie [Web] → [Web] und klicken Sie auf "Fertig stellen", da die Einstellung "Abhängigkeiten" geändert wird. スクリーンショット 2018-12-16 18.52.33.png Ich denke, Sie können ein Projekt mit dem Namen erstellen, den Sie im zweiten Schritt festgelegt haben. Darüber hinaus ist der automatisch generierte Java-Quellcode im konfigurierten Paket enthalten. Wenn Sie wie im obigen Bild gezeigt erstellt haben, sollte das Projekt "testservice" erstellt und "TestserviceApplication.java" im Paket com.microservice unter src / main / java erstellt werden. スクリーンショット 2018-12-17 1.30.33.png

Quelle bearbeiten

Bearbeiten Sie die generierte Java-Quelldatei.

TestserviceApplication.java


package com.microservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
public class TestserviceApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestserviceApplication.class, args);
    }
}
@RestController
class HomeController {
    @RequestMapping("/")
    public HogeTest getSentence() {
        return new HogeTest("Prüfung");
    }
}
class HogeTest {
    private String info;
    public HogeTest (String info) {
        this.setInfo(info);
    }
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
}

Es ist ein Prozess, der einen einfachen JSON zurückgibt. Der Inhalt des Quellcodes wird diesmal weggelassen. Wenn Sie die Quelle bearbeiten, können Sie sie überprüfen, indem Sie [Ausführen] → [Ausführen als] → [Spring Boot App] im Feld STS ausführen. Fahren Sie jedoch vorerst mit der Erläuterung zum Erstellen einer ausführbaren Datei fort.

Erstellen einer ausführbaren Datei

Erstellen Sie eine JAR-Datei mit der Installationsfunktion von Maven. Wechseln Sie im Terminal in das Projektverzeichnis "testservice" und führen Sie den folgenden Befehl aus.

mvn install

Bei Erfolg sollten Sie eine ausführbare Datei mit dem Namen "testservice-0.0.1-SNAPSHOT.jar" im Zielverzeichnis haben. Lass uns das machen. Führen Sie den folgenden Befehl direkt unter dem Projektverzeichnis "testservice" aus.

java -jar target/testservice-0.0.1-SNAPSHOT.jar

Greifen Sie mit einem Browser auf "http : // localhost: 8080" zu, und es ist in Ordnung, wenn Folgendes angezeigt wird.

スクリーンショット 2018-12-18 2.10.16.png

Beenden Sie nach der Bestätigung den Dienst, indem Sie am Terminal "Strg + C" drücken.

In Docker bereitstellen

Stellen Sie die ausführbare Datei schließlich als Docker-Image bereit. Docker ist ein Virtualisierungsdienst vom Containertyp. Ein Container ist eine etwas unabhängige Prozessausführungsumgebung, die von anderen Prozessen isoliert ist. Das diesmal erstellte Programm kann auch auf dem Docker-Container ausgeführt werden. Ähnlich wie bei JVM absorbiert Docker Unterschiede im Betriebssystem. Wenn das Programm auf dem Container ausgeführt werden kann, kann es daher problemlos in andere Umgebungen wie die Produktionsumgebung verschoben werden. (Es wird davon ausgegangen, dass Docker auch in dieser Umgebung enthalten ist.)

Erstellen eines Docker-Images

Jetzt erstellen wir ein Docker-Image. Dies ist das Dateisystem, das zum Erstellen eines Docker-Containers erforderlich ist. Bereiten Sie die diesmal erstellte Ausführungsdatei "testservice-0.0.1-SNAPSHOT.jar" vor und erstellen Sie eine Textdatei mit dem Namen "Dockerfile" im selben Verzeichnis. Eine Docker-Datei ist eine Datei, die Anweisungen zum Erstellen eines Images enthält. Beschreiben Sie in der Datei Folgendes.

Dockerfile


FROM frolvlad/alpine-oraclejdk8:slim
ADD testservice-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:dev/./urandom -jar /app.jar"]

Sobald Sie eine Docker-Datei haben, können Sie das Image mit dem folgenden Befehl erstellen.

docker build -t microtest ./

Container starten

Starten Sie den Container basierend auf dem erstellten Image mit dem folgenden Befehl.

docker run -p 8080:8080 -d -t microtest

Es ist schwer zu verstehen, da es im Hintergrund ausgeführt wird. Sie können jedoch mit dem folgenden Befehl überprüfen, ob es ausgeführt wird.

docker ps

Es ist in Ordnung, wenn es wie ↓ angezeigt wird. スクリーンショット 2018-12-18 2.06.10.png

Wenn Sie erneut versuchen, mit einem Browser auf "http : // localhost: 8080" zuzugreifen, wird {"info": "test"} wie zuvor im JSON-Format angezeigt.

schließlich

Ich habe vorerst versucht, es zu erstellen, aber es gibt noch einige Teile, die die oben genannten Funktionen nicht erfüllen, z. B. die Automatisierung der Bereitstellung. SpringBoot verfügt über eine Funktion, die beim Erstellen automatisch ausgeführt wird, wenn Sie Testcode in JUnit usw. schreiben und an der angegebenen Position platzieren. Es kann auch in Docker bereitgestellt werden. Mit anderen Worten, es ist möglich, den Test beim Erstellen auszuführen, eine ausführbare Datei zu erstellen, wenn sie erfolgreich ist, und sie für Docker bereitzustellen, aber ~~ Ich habe vergessen, wie es geht ~~ Es wird lange dauern, also werde ich eine andere Gelegenheit nutzen. ..

Referenzseite

https://blog.guildworks.jp/2015/01/27/docker-with-spring-boot/

Recommended Posts

Erstellen Sie mit Spring Boot einen Mikrodienst
Erstellen Sie eine App mit Spring Boot 2
Erstellen Sie eine App mit Spring Boot
Mit Spring Boot herunterladen
Erstellen Sie mit Spring Boot eine einfache Such-App
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Erstellen Sie Ihr eigenes Dienstprogramm mit Thymeleaf mit Spring Boot
Erstellen Sie eine Spring Boot-Umgebung mit Windows + VS-Code
Erstellen Sie einen Web-API-Server mit Spring Boot
Erstellen Sie mit Docker eine Spring Boot-Entwicklungsumgebung
Erstellen Sie mit Spring Boot 2.0 einen Spring Cloud Config Server mit Sicherheit
Generieren Sie mit Spring Boot einen Barcode
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Spring Boot beginnend mit Docker
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
Mail mit Spring Boot verschicken
Erstellen Sie Restapi mit Spring Boot (bis zum Ausführen der App)
Erstellen Sie mit Spring Security 2.1 eine einfache Demo-Site mit Spring Security
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Erhalten Sie Validierungsergebnisse mit Spring Boot
(Intellij) Hallo Welt mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Die Nachrichtenkooperation begann mit Spring Boot
Verarbeitung beim Starten einer Anwendung mit Spring Boot
Erstellen einer Spring Boot-Entwicklungsumgebung in Vagrant
Hallo Welt mit Eclipse + Spring Boot + Maven
Senden Sie regelmäßige Benachrichtigungen mit LineNotify + Spring Boot
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
So erstellen Sie mit Spring Boot einen eigenen Controller, der / error entspricht
HTTPS mit Spring Boot und Let's Encrypt
Erstellen Sie mit Docker eine Spring Boot-gradle-mysql-Entwicklungsumgebung
Fordern Sie Spring Boot heraus
Versuchen Sie es mit Spring Boot mit VS-Code
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Starten Sie die Entwicklung von Webanwendungen mit Spring Boot
Starten Sie die Nginx + Spring Boot-Anwendung mit Docker-Compose
Ich habe Lazy Initialization mit Spring Boot 2.2.0 ausprobiert
Spring Boot Form
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async