[JAVA] Ich habe sofort QUARKUS ausprobiert

Wer ist QUARKUS?

Ein neues Java-Framework mit GraalVM als Ausführungs-VM. Red Hat ist der Entwickler.

The goal of Quarkus is to make Java a leading platform in Kubernetes and serverless environments while offering developers a unified reactive and imperative programming model to optimally address a wider range of distributed application architectures.

Quarkus 'Ziel ist es, Java weiterzuentwickeln, indem Entwicklern ein integriertes reaktives und imperiales Programmiermodell zur Verfügung gestellt wird, das eine breite Palette verteilter Anwendungsarchitekturen in Umgebungen wie Kubernetes und ohne Server unterstützt. Plattform.

Wie im offiziellen Blog angegeben, scheint es der Ausführungsumgebung wie serverlos zu entsprechen, in der Spring und Play leicht verzögert sind.

Auch, wie man mit dem herkömmlichen imperativen Modell schreibt Eine der großen Attraktionen ist, dass es beide reaktiven Schreibstile unterstützt.

Mit RxJava sollten Sie ein flexibleres und weniger latenzempfindliches Anwendungsverhalten erzielen können.

Es ist auch flexibel für vorhandene Bibliotheken. Ist es also nicht mehr als genug, um schnell etwas zu erstellen?

Zusätzlich zur Verwendung von ORM im Ruhezustand mit Standardspezifikationen Es scheint MariaDB und PostgreSQL zu unterstützen.

Sie können übrigens auch in Kotlin schreiben.

Weitere Informationen finden Sie hier. ↓↓↓ https://quarkus.io/get-started/

Ausführungsumgebung

macOS Mojave 10.14.3

Was Sie brauchen, um QUARKUS auszuführen

--JJ1.8 mit JAVA_HOME und höher --Maven 3.5.3 und höher

Maven Setup

Da es sich um einen Mac handelt, installieren Sie ihn mit Homebrew

brew update && brew install Maven

Überprüfen Sie, ob es installiert ist

mvn --version

Erfolg, wenn es so zurückkehrt

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T03:41:47+09:00)
Maven home: /usr/local/Cellar/maven/3.6.0/libexec
Java version: 1.8.0_162, vendor: Oracle Corporation, runtime: /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.14.3", arch: "x86_64", family: "mac"

Graal VM-Setup

Installieren Sie GraalVM (graalvm-ce-1.0.0-rc13-macos-amd64.tar.gz) ↓↓↓ https://github.com/oracle/graal/releases

Festlegen der GraalVM-Umgebungsvariablen (GRAALVM_HOME) Bitte übergeben Sie den Pfad entsprechend Ihrer Shell. bash -> bashprofile zsh -> zshrc

GRAALVM_HOME=/Library/Java/JavaVirtualMachines/graalvm-ce-1.0.0-rc13-macos-amd64/Contents/Home

Starten Sie ein neues Projekt

Wechseln Sie in das Verzeichnis, in dem Sie das Projekt ablegen möchten

$ mvn io.quarkus:quarkus-maven-plugin:0.11.0:create \
    -DprojectGroupId=jp.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.quickstart.GreetingResource" \
    -Dpath="/hello"

Dadurch wird eine Anwendung gestartet, die auf Maven basiert und auf QUARKUS basiert. Die Verzeichnisstruktur sieht so aus

image.png

Dockerfile für / Docker Sie möchten den erforderlichen Java-Code in / java einfügen. Hier gibt es GreetingResource.java und der Inhalt ist ↓↓

GreetingResource.java


package org.acme.quickstart;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "hello";
    }
}

Enthält einen einfachen Code, der "Hallo" zurückgibt, wenn GET mit / Hallo.

Bauen

#Starten Sie im Entwicklungsmodus
$ mvn compile quarkus:dev

Hot Reload funktioniert beim Start im Entwicklungsmodus. (Hot Reload ist eine Funktion, die den Unterschied bei jeder Änderung kompiliert und widerspiegelt.)

Bestätigen Sie, ob der Start erfolgreich ist

Es wird auf Port 8080 mit den Standardeinstellungen gestartet. Drücken Sie also auf Curl und prüfen Sie, ob Hallo zurückgegeben wird.

curl http://localhost:8080/hello

Native binäre Generation

$ mvn package -Pnative -Dnative-image.docker-build=true

Was ist überhaupt eine native Binärdatei? Es ist eine Maschinensprache, die für die Ausführung erforderliche Anweisungen enthält, die für jede Ausführungsmaschine vorbereitet werden. Mit anderen Worten, durch die Verwendung von GraalVM spuckt Linux eine für Linux optimierte Maschinensprache aus.

Dieser Vorgang dauert übrigens einige Zeit. Das Originaldokument sagt auch, dass es mir 15 Minuten gibt.

Docker Build

Lassen Sie uns Docker bauen, wenn wir hier sind. Klicken Sie hier für Befehle

$ docker build -f src/main/docker/Dockerfile -t <Bildname> .

Dadurch wird das Image mithilfe der Docker-Datei erstellt, die in der gerade erstellten frühen Anwendung enthalten ist. Das Innere der Docker-Datei sieht so aus

####
# Before building the docker image run:
#
# mvn package -Pnative -Dnative-image.docker-build=true
#
# Then, build the image with:
#
# docker build -f src/main/docker/Dockerfile -t quarkus/getting-started .
#
# Then run the container using:
#
# docker run -i --rm -p 8080:8080 quarkus/getting-started
#
###
FROM registry.fedoraproject.org/fedora-minimal
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
EXPOSE 8080
CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]

COPY target/*-runner /work/application Wie Sie sehen können, wird die native Binärdatei unter target verwendet.

Starten Sie den Docker-Container

$ docker run -i --rm -p 8080:8080 <Bildname>

Sie können das vorherige Bild starten, indem Sie diesen Befehl drücken. Portnummer 8080 Zu diesem Zeitpunkt wird die Ausführungsgeschwindigkeit angezeigt, sie ist jedoch extrem schnell.

Es begann in 0,005 Sekunden an meiner Hand.

Zusammenfassung

Durch die Verwendung von QUARKUS scheint es möglich zu sein, eine Anwendung zu entwickeln, die die Schwäche der JVM überwindet, die standardmäßig Docker unterstützt. Dies ist die Startgeschwindigkeit. Es kann auch gesagt werden, dass es für eine groß angelegte Entwicklung geeignet ist, da eine gemeinsame Entwicklungsumgebung basierend auf dem erstellten Docker-Image erstellt werden kann.

Ich hoffe, dass dies eine Gelegenheit ist, eine Umgebung zu schaffen, in der Sie Java noch mehr genießen können. Ich interessiere mich so für GraalVM, dass ich einen weiteren Artikel über GraalVM schreiben werde.

Recommended Posts

Ich habe sofort QUARKUS ausprobiert
Ich habe das Java-Framework "Quarkus" ausprobiert.
Ich habe es mit Spring versucht.
Ich habe versucht, Tomcat zu setzen
Ich habe youtubeDataApi ausprobiert.
Ich habe versucht, ① umzugestalten
Ich habe FizzBuzz ausprobiert.
Ich habe JHipster 5.1 ausprobiert
[Ich habe es versucht] Spring Tutorial
Ich habe versucht, Autoware auszuführen
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe Spring Batch ausprobiert
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, node-jt400 (Programme)
Ich habe versucht, node-jt400 (ausführen)
Ich habe versucht, node-jt400 (Transaktionen)
Ich habe versucht, node-jt400 (Umgebungskonstruktion)
Ich habe DI mit Ruby versucht
Ich habe versucht, node-jt400 (IFS schreiben)
Ich habe versucht, node-jt400 (SQL Update)
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe Spring State Machine ausprobiert
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe Rails Anfänger ausprobiert [Kapitel 1]
Ich habe versucht, Apache Wicket zu verwenden
Ich habe versucht, node-jt400 (SQL-Abfrage)
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, den Quellcode zu analysieren
Ich habe das FizzBuzz-Problem ausprobiert
Ich habe versucht, node-jt400 (SQL-Stream)
Ich habe versucht, node-jt400 (IFS lesen)
Ich habe Rails Anfänger ausprobiert [Kapitel 2]
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, Metaprogrammierung mit Java
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Ich habe Angular Tutorial + SpringBoot + PostgreSQL ausprobiert
Ich habe etwas versucht, das als rekursive Suche bezeichnet wird
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
[K8s] Ich habe versucht, zwischen Pods zu kommunizieren!
Ich habe eine morphologische Analyse mit MeCab versucht
Ich habe ein wenig digdags docker.run_options ausprobiert
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe versucht, die Methode zu erklären
Ich habe versucht, Domino11 in CentOS7 zu integrieren
[Rails] Ich habe versucht, die Anwendung zu löschen
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe Javas Micro-Benchmarking-Tool JMH ausprobiert
Ich habe versucht, JWT in Java zu verwenden
Ich habe GraphQL mit Spring Boot ausprobiert
Ich habe versucht, das Java-Lernen zusammenzufassen (1)