J'ai essayé Java8 + Spring Boot avec GAE SE (et à propos de son environnement de développement)

J'ai essayé Java8 + Spring Boot avec GAE Java. En gros, je devrais juste faire le site officiel, mais j'étais accro à l'environnement de développement, alors j'ai pris une note. Ou plutôt, les documents officiels étaient assez différents et je ne savais pas à quel document me référer, donc c'était difficile.

Cette fois, sur la base de Utilisation d'Apache Maven et du plug-in App Engine, [GitHub Repository](https: / Je l'ai fait en empruntant le contenu de /github.com/GoogleCloudPlatform/getting-started-java/tree/master/appengine-standard-java8/springboot-appengine-standard).

Si vous faites une erreur ou souhaitez faire cela, n'hésitez pas à faire une demande de modification.

Je suis en fait une secte Gradle, mais j'ai essayé diverses choses avec Gradle, mais j'ai arrêté à cause de rebondissements. Peut-être que ce n'est pas grave si vous le faites avec Uchiyoi-chan.

J'ai mis ce code dans Github.

Les choses nécessaires

Création d'applications

Créez avec Maven Archetype. Je pense que c'est probablement la meilleure façon d'y arriver.

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:

Il semble que Objectify soit recommandé lors de l'utilisation de Datastore, donc si vous spécifiez ʻuseObjectify` avec True, il sera ajouté à la dépendance depuis le début.

Si vous effectuez un peu de chargement et ainsi de suite, la sortie sera la suivante.

[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)

Même si vous regardez l'explication officielle, vous ne pouvez pas décider laquelle choisir, mais je pense que c'est bien avec «3». S'agit-il de "4" pour ceux qui souhaitent utiliser Cloud Endpoints? Je ne l'ai pas vu correctement, mais la différence est de savoir si Objectify peut être spécifié au moment de la création et si la version de Mockito est Skelton (2), c'est 2.0 β. Il n'y a aucune différence dans le code généré. Ou plutôt, il fonctionne sur Spring Boot, donc je jetterai le code Java généré plus tard.

Le reste sera demandé pour l'ID de groupe, l'ID d'artefact, le paquet, etc., alors répondez-y.

Ceci termine le code source pour App Engine SE qui s'exécute sur Java 8. Il contient juste Hello World.

Environnement de développement

Paramètres IDEA

Le plug-in AppEngine peut être inclus par défaut. Ceci est obsolète, alors désactivons-le.

--Installez le plug-in Google Cloud Tools --Désactiver le plug-in Google App Engine

Veuillez consulter ici pour plus de détails.

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

Il n'est pas valide car il est intégré et je pense qu'il ne peut pas être désinstallé. Je pense qu'il disparaîtra bientôt avec la mise à jour de la version.

Pour les autres SDK Cloud et autres paramètres, je pense que vous devriez vous référer à celui officiel. スクリーンショット 2017-08-29 17.12.52.png スクリーンショット 2017-08-29 17.12.24.png

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

Créer un projet

Créez un projet vide comme vous le souhaitez. Importez le module là-bas.

Veuillez spécifier Java 8 comme SDK du projet.

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

Ajouter un module

Importez l'application créée dans le projet IntteliJ.

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

Veuillez spécifier pom.xml et importer.

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

Si vous importez et fermez la fenêtre Structure du projet, GAE sera détecté et défini en bas à droite, veuillez donc le configurer.

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

Il lit ensuite l'air, lit les paramètres et vous permet d'exécuter le serveur local et les paramètres de déploiement sur IntelliJ.

Après cela, vous devez configurer le projet avec Edit Configure pour le déploiement.

Paramètres de déploiement

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

Sélectionnez Déployer. Ce n'est pas grave si vous choisissez quelque chose comme une marque de cadeau.

Ensuite, vous verrez les paramètres de déploiement et les paramètres de projet ci-dessous.

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

Vous devez vous connecter pour la première fois, cliquez donc sur le bouton pour ouvrir le navigateur et vous connecter. S'il est authentifié, certains projets seront possédés comme une image, alors sélectionnez le projet GCP cible.

Options de déploiement

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

Il semble préférable de définir la version sur Génération automatique. Si vous souhaitez avoir la version déployée du trafic immédiatement, vous pouvez activer Promouvoir la version déployée pour recevoir tout le trafic. S'il existe des mises à jour telles que Cron et Index, il est judicieux d'activer Update Hogehoge.

Botte de printemps

Ajouter une dépendance

Jouons avec pom.xml. AppEngine semble être Jetty, vous devez donc exclure le Tomcat par défaut de Spring Boot.

Ajouté à <dependencies>

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

Ajout de «»

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

Ajouté à <plugins>

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

Ajouté à <properties>

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

Après cela, veuillez implémenter l'application Spring Boot normalement. Vous pouvez supprimer HelloAppEngine et index.jsp générés par l'archétype.

Désactivez la sortie de la bannière au démarrage

Il est recommandé de le désactiver car il sera ennuyeux d'apparaître dans Logging. Quand il est allumé, cela ressemble à ceci.

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

Ajoutons le paramètre à ʻapplication.yml`.

spring:
    main:
        banner-mode: "off"

Résumé

Kanso

C'est une atmosphère qui semble pouvoir se développer normalement avec Spring Boot. Pour être honnête, j'ai passé environ une journée à me demander quelle était la tâche Maven car j'ai lu la documentation et le code source du référentiel au début, mais je pense que cela suffit pour le développement local. .. Si vous le démarrez avec une commande, vous pouvez utiliser mvn app engine: run.

Vous pouvez également essayer d'implémenter correctement l'application.

Quelle est l'heure de démarrage?

Il faut environ 10 secondes pour que le premier accès démarre et commence à travailler avec ce code source, qui n'a presque pas de dépendances. Je ne peux rien dire à ce sujet, alors faites votre propre jugement. (J'ai évalué l'heure de démarrage entre le début de la demande de journalisation et la fin du journal de démarrage de l'application. Est-ce le cas?) Veuillez me dire comment le mesurer correctement.

Je ne pense pas que cela convienne aux applications monolithiques, qui ont tendance à être terriblement lentes pour la première fois si la dépendance est définie sur Morimori.

prime

Je déploie le plugin de moteur d'application de maven, mais j'utilise la commande gcloud app.

Dépôt

Le code source pour cette fois est ici

Recommended Posts

J'ai essayé Java8 + Spring Boot avec GAE SE (et à propos de son environnement de développement)
J'ai essayé Google Sign-In avec Spring Boot + Spring Security REST API
Java - Déployer le projet Spring Boot sur GAE
J'ai essayé de créer un environnement de développement Mac Python avec pythonz + direnv
J'ai essayé de jouer en connectant PartiQL et MongoDB
J'ai essayé la différenciation jacobienne et partielle avec python
J'ai essayé la synthèse de fonctions et le curry avec python
J'ai construit l'environnement de développement d'AWS Chalice avec docker et j'ai essayé de déployer une application sans serveur à très haute vitesse
Virtualiser (isoler) l'environnement de développement IBM i python avec chroot
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2 2
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
J'ai essayé de lire et d'enregistrer automatiquement avec VOICEROID2
Gérez les packages d'exécution Python et les packages d'environnement de développement avec Poetry
Installez Ubuntu 20.04 avec GUI et préparez l'environnement de développement
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
[Python] Chapitre 01-02 À propos de Python (Exécution et installation de l'environnement de développement)
J'ai essayé de développer une application Web et j'ai réfléchi à la manière d'éviter que les débutants ne tombent malades.
À propos de l'environnement de développement Python
J'ai essayé de prédire et de soumettre les survivants du Titanic avec Kaggle
Hello World avec Google App Engine (Java 8) + Spring Boot + Gradle
J'ai essayé de connecter Raspeye et conect + avec l'API Web
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
[Python] J'ai essayé de visualiser des tweets sur Corona avec WordCloud
J'ai essayé de programmer le test du chi carré en Python et Java.
J'ai essayé d'énumérer les différences entre java et python
J'ai essayé de créer une interface graphique à trois yeux côte à côte avec Python et Tkinter
Hello World avec Google App Engine (Java 11) + Spring Boot + Gradle
L'environnement sans serveur est-il plus de 600 fois plus lent? ~ J'ai essayé l'analyse comparative avec Go, Node.js et Python! ~