[GO] Ich habe Java8 + Spring Boot mit GAE SE (und seiner Entwicklungsumgebung) ausprobiert.

Ich habe Java8 + Spring Boot mit GAE Java ausprobiert. Grundsätzlich sollte ich nur die offizielle Website machen, aber ich war süchtig nach der Entwicklungsumgebung, also machte ich mir eine Notiz. Oder besser gesagt, die offiziellen Dokumente waren ganz anders und ich war mir nicht sicher, auf welches ich mich beziehen sollte, also war es schwierig.

Dieses Mal basierend auf diesem Verwenden von Apache Maven und dem App Engine Plugin, [GitHub Repository](https: / Ich habe es geschafft, während ich den Inhalt von /github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/springboot-appengine-standard ausgeliehen habe.

Wenn Sie einen Fehler machen oder dies tun möchten, zögern Sie bitte nicht, eine Bearbeitung anzufordern.

Ich bin eigentlich eine Gradle-Sekte, aber ich habe verschiedene Dinge mit Gradle ausprobiert, aber es gab Drehungen und Wendungen und ich habe damit aufgehört. Vielleicht ist es okay, wenn du es mit Uchiyoi-chan machst.

Ich habe diesen Code auf Github gesetzt.

Dinge notwendig

Anwendungserstellung

Erstellen Sie mit Maven Archetype. Ich denke, das ist wahrscheinlich der beste Weg, es zu schaffen.

mvn archetype:generate -Dappengine-version=1.9.54 \
-Djava8=true \
-DCloudSDK_Tooling=true \
-DuseObjectify=true \
-Dapplication-id=your-app-id \
-Dfilter=com.google.appengine.archetypes:

Es scheint, dass Objectify empfohlen wird, wenn Sie den Datenspeicher verwenden. Wenn Sie also "useObjectify" mit "True" angeben, wird es von Anfang an zur Abhängigkeit hinzugefügt.

Wenn Sie ein wenig laden und so weiter, wird die Ausgabe wie folgt sein.

[INFO] Generating project in Interactive mode
[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0)
Choose archetype:
1: remote -> com.google.appengine.archetypes:appengine-flexible-archetype (A basic Java application with Google App Engine flexible.)
2: remote -> com.google.appengine.archetypes:appengine-skeleton-archetype (A skeleton application with Google App Engine)
3: remote -> com.google.appengine.archetypes:appengine-standard-archetype (A basic Java application with Google App Engine Standard)
4: remote -> com.google.appengine.archetypes:endpoints-skeleton-archetype (A skeleton project using Cloud Endpoints Frameworks with Google App Engine Standard)
5: remote -> com.google.appengine.archetypes:guestbook-archetype (A guestbook application with Google App Engine)
6: remote -> com.google.appengine.archetypes:hello-endpoints-archetype (A simple starter application using Cloud Endpoints Frameworks with Google App Engine Standard)
7: remote -> com.google.appengine.archetypes:skeleton-archetype (Archetype with a README about Google App Engine archetypes)

Selbst wenn Sie sich die offizielle Erklärung ansehen, können Sie sich nicht entscheiden, welche Sie wählen sollen, aber ich denke, es ist gut mit "3". Ist es ungefähr "4" für diejenigen, die Cloud-Endpunkte verwenden möchten? Ich habe es nicht richtig gesehen, aber der Unterschied besteht darin, ob Objectify zum Zeitpunkt der Erstellung angegeben werden kann und ob die Version von Mockito Skelton (2) ist, es ist 2.0 β. Es gibt keinen Unterschied im generierten Code. Oder besser gesagt, es läuft auf Spring Boot, also werde ich den generierten Java-Code später wegwerfen.

Der Rest wird nach Gruppen-ID, Artefakt-ID, Paket usw. gefragt. Beantworten Sie diese also.

Damit ist der Quellcode für App Engine SE vervollständigt, der unter Java 8 ausgeführt wird. Es enthält nur Hello World.

Entwicklungsumgebung

IDEA-Einstellungen

Das AppEngine-Plug-In ist möglicherweise standardmäßig enthalten. Dies ist veraltet, also deaktivieren wir es.

Weitere Informationen finden Sie unter hier.

スクリーンショット 2017-08-29 16.23.17.png

Es ist ungültig, weil es eingebaut ist und ich denke, es kann nicht deinstalliert werden. Ich denke, dass es mit dem Versions-Upgrade bald verschwinden wird.

Für andere Einstellungen wie das Cloud SDK sollten Sie sich auf die offizielle beziehen. スクリーンショット 2017-08-29 17.12.52.png スクリーンショット 2017-08-29 17.12.24.png

スクリーンショット 2017-08-29 17.18.04.png

Ein Projekt erstellen

Erstellen Sie ein leeres Projekt nach Ihren Wünschen. Modul dort importieren.

Bitte geben Sie Java 8 als SDK des Projekts an.

スクリーンショット 2017-08-29 17.13.36.png

Modul hinzufügen

Importieren Sie die erstellte Anwendung in das IntteliJ-Projekt.

スクリーンショット 2017-08-29 17.13.46.png

Bitte geben Sie pom.xml an und importieren Sie.

スクリーンショット 2017-08-29 17.15.12.png

Wenn Sie das Projektstrukturfenster importieren und schließen, wird GAE erkannt und unten rechts festgelegt. Konfigurieren Sie es daher.

スクリーンショット 2017-08-29 17.15.25.png

Anschließend wird die Luft gelesen, die Einstellungen gelesen und Sie können lokale Server- und Bereitstellungseinstellungen auf IntelliJ ausführen.

Danach müssen Sie das Projekt mit Edit Configure for Deployment konfigurieren.

Bereitstellungseinstellungen

スクリーンショット 2017-08-29 17.16.11.png

Wählen Sie Bereitstellen. Es ist in Ordnung, wenn Sie so etwas wie eine Geschenkmarke wählen.

Anschließend sehen Sie unten die Bereitstellungs- und Projekteinstellungen.

スクリーンショット_2017-08-29_17_16_35.png

Sie müssen sich zum ersten Mal anmelden. Klicken Sie daher auf die Schaltfläche, um den Browser zu öffnen und sich anzumelden. Wenn es zertifiziert ist, gehören einige Projekte wie ein Image. Wählen Sie daher das Ziel-GCP-Projekt aus.

Bereitstellungsoptionen

スクリーンショット 2017-08-29 17.17.01.png

Es scheint besser, die Version auf Automatisch generieren zu setzen. Wenn Sie den Datenverkehr sofort bereitstellen möchten, können Sie "Die bereitgestellte Version heraufstufen, um den gesamten Datenverkehr zu empfangen" aktivieren. Wenn es Updates wie Cron und Index gibt, ist es eine gute Idee, Update Hogehoge zu aktivieren.

Frühlingsstiefel

Abhängigkeit hinzufügen

Lass uns mit pom.xml spielen. AppEngine scheint Jetty zu sein, daher müssen Sie den Spring Boot-Standard-Tomcat ausschließen.

Hinzugefügt zu "<Abhängigkeiten>"

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring.boot.version}</version>
            <!-- Exclude Tomcat so that it doesn't conflict w/ Jetty server -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Exclude any jul-to-slf4j -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jul-to-slf4j</artifactId>
            <scope>provided</scope>
        </dependency>

wurde hinzugefügt

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

Hinzugefügt zu <plugins>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring.boot.version}</version>
            </plugin>

Hinzugefügt zu <Eigenschaften>

        <spring.boot.version>1.5.6.RELEASE</spring.boot.version>

Implementieren Sie danach die Spring Boot-Anwendung normal. Es ist in Ordnung, die vom Archetyp generierte HelloAppEngine und index.jsp zu löschen.

Schalten Sie die Bannerausgabe beim Start aus

Es wird empfohlen, es auszuschalten, da es ärgerlich ist, in der Protokollierung angezeigt zu werden. Wenn es eingeschaltet ist, sieht es so aus.

スクリーンショット 2017-08-29 17.25.28.png

Fügen wir die Einstellung zu "application.yml" hinzu.

spring:
    main:
        banner-mode: "off"

Zusammenfassung

Kanso

Es ist eine Atmosphäre, die sich mit Spring Boot normal entwickeln lässt. Um ehrlich zu sein, habe ich mich ungefähr einen Tag lang gefragt, was die Maven-Aufgabe war, weil ich zuerst die Dokumentation und den Quellcode des Repositorys gelesen habe, aber ich denke, dass dies für die lokale Entwicklung ausreicht. .. Wenn Sie es mit einem Befehl starten, können Sie mvn app engine: run verwenden.

Sie können auch versuchen, die Anwendung ordnungsgemäß zu implementieren.

Was ist die Startzeit?

Es dauert ungefähr 10 Sekunden, bis der erste Zugriff gestartet und mit diesem Quellcode gearbeitet wird, der fast keine Abhängigkeiten aufweist. Ich kann dazu nichts sagen, also machen Sie bitte Ihr eigenes Urteil. (Ich habe die Startzeit vom Beginn der Protokollierungsanforderung bis zum Ende des Anwendungsstartprotokolls beurteilt. Ist dies der Fall?) Bitte sagen Sie mir, wie ich es richtig messen soll.

Ich denke nicht, dass es für monolithische Anwendungen geeignet ist, die zum ersten Mal furchtbar langsam sind, wenn die Abhängigkeit auf Morimori eingestellt ist.

Bonus

Ich stelle das App Engine Plugin von maven bereit, verwende aber den Befehl gcloud app.

Repository

Der Quellcode für diese Zeit ist hier

Recommended Posts

Ich habe Java8 + Spring Boot mit GAE SE (und seiner Entwicklungsumgebung) ausprobiert.
Ich habe versucht, mich mit Spring Boot + Spring Security REST API anzumelden
Java-Deploy Spring Boot-Projekt für GAE
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe versucht, mit PartiQL und MongoDB verbunden zu spielen
Ich habe Jacobian und teilweise Differenzierung mit Python versucht
Ich habe Funktionssynthese und Curry mit Python versucht
Ich habe die Entwicklungsumgebung von AWS Chalice mit Docker erstellt und versucht, eine serverlose Anwendung mit sehr hoher Geschwindigkeit bereitzustellen
Virtualisieren (isolieren) Sie die IBM i Python-Entwicklungsumgebung mit chroot
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Verwalten Sie Python-Laufzeitpakete und Entwicklungsumgebungspakete mit Poetry
Installieren Sie Ubuntu 20.04 mit GUI und bereiten Sie die Entwicklungsumgebung vor
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
[Python] Kapitel 01-02 Über Python (Ausführung und Installation der Entwicklungsumgebung)
Ich habe versucht, eine Webanwendung zu entwickeln, und überlegt, wie ich verhindern kann, dass Anfänger krank werden.
Informationen zur Python-Entwicklungsumgebung
Ich habe versucht, Überlebende der Titanic mit Kaggle vorherzusagen und einzureichen
Hallo Welt mit Google App Engine (Java 8) + Spring Boot + Gradle
Ich habe versucht, Raspeye und conect + mit der Web-API zu verbinden
Ich habe versucht, Follow Management mit Twitter API und Python (einfach)
[Python] Ich habe versucht, Tweets über Corona mit WordCloud zu visualisieren
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Ich habe versucht, die Benutzeroberfläche neben Python und Tkinter dreiäugig zu gestalten
Hallo Welt mit Google App Engine (Java 11) + Spring Boot + Gradle
Ist die Umgebung ohne Server mehr als 600 Mal langsamer? ~ Ich habe Benchmarking mit Go, Node.js und Python versucht! ~