--Erstellen Sie eine einfache Hello World-Display-Webanwendung mit der Java 11-Standardumgebung von Google App Engine + Spring Boot-Konfiguration
--Google App Engine Java 11-Standardumgebung
├── build.gradle
├── settings.gradle
└── src
├── main
│ ├── appengine
│ │ └── app.yaml
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── helloworld
│ │ ├── HelloworldApplication.java
│ │ ├── HelloworldController.java
│ │ └── HelloworldErrorController.java
│ └── resources
│ ├── application.yml
│ ├── static
│ │ └── assets
│ │ └── helloworld.png
│ └── templates
│ ├── error.html
│ └── helloworld.html
└── test
└── java
└── com
└── example
└── helloworld
└── HelloworldApplicationTests.java
build.gradle
Eine Datei, die den Prozess zum Erstellen in Gradle beschreibt. Das Gradle-Plugin von Google App Engine verwendet die Serie 2.
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
//Verwenden Sie das Spring Boot Gradle Plugin
classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.2.0.RELEASE'
//Verwenden Sie das Google App Engine Gradle-Plugin
classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.2.0'
}
}
plugins {
//Einführung des Java-Plug-Ins
id 'java'
// https://plugins.gradle.org/plugin/org.springframework.boot
id 'org.springframework.boot' version '2.2.0.RELEASE'
// https://plugins.gradle.org/plugin/io.spring.dependency-management
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}
//App Engine Plug-In eingeführt
apply plugin: 'com.google.cloud.tools.appengine'
repositories {
mavenCentral()
}
dependencies {
//Neueste Version der App Engine API
implementation 'com.google.appengine:appengine-api-1.0-sdk:+'
// Thymeleaf
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
// Spring Web
implementation 'org.springframework.boot:spring-boot-starter-web'
// Test
testImplementation('org.springframework.boot:spring-boot-starter-test') {
//Schließen Sie die Unterstützung für JUnit 4 aus
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
//Aktivieren Sie die Unterstützung für JUnit 5
useJUnitPlatform()
testLogging {
//Anzeige der Standardausgabe und der Standardfehlerausgabe während des Tests
showStandardStreams true
//Ausgabeereignis(TestLogEvent)
events 'started', 'skipped', 'passed', 'failed'
}
}
//ID und Version der Webanwendungsgruppe
group = "com.example.helloworld"
version = "0.0.1"
//Verwenden Sie Java 11
sourceCompatibility = '11'
targetCompatibility = '11'
//Aufgabeneinstellungen für Google App Engine
appengine {
//Bereitstellungseinstellungen
// GCLOUD_Wenn Sie CONFIG angeben
//Die in der gcloud-Konfiguration festgelegten Projektinformationen werden festgelegt
deploy {
//Stellen Sie die Ziel-Google Cloud-Projekt-ID bereit
projectId = "GCLOUD_CONFIG"
//Web-App-Version, die sich in der Bereitstellung widerspiegelt
//Wenn nicht angegeben, wird eine neue generiert
version = "GCLOUD_CONFIG"
}
}
//Führen Sie vor der Bereitstellung Tests aus
appengineDeploy.dependsOn test
appengineStage.dependsOn test
Referenz:
settings.gradle
Wenn Sie settings.gradle nicht festlegen, wechseln Sie in das übergeordnete Verzeichnis, um settings.gradle zu finden. Fügen Sie es also auch in ein einzelnes Projekt ein.
settings.gradle
rootProject.name = 'helloworld'
app.yaml
Konfigurationsdatei für Google App Engine. Beschreiben der Informationen der Webanwendung.
#Verwenden Sie Java 11
runtime: java11
#Java 8 Runtime F1 hatte 128 MB Speicher, Java 11 hatte 256 MB
instance_class: F1
#Autoscale-Einstellung für die Anzahl der Instanzen
automatic_scaling:
max_instances: 1 #Maximale Anzahl von Instanzen
min_instances: 0 #Mindestanzahl von Instanzen. Wenn auf 0 gesetzt, ist die Anzahl der Instanzen 0, wenn sie nicht verwendet werden.
target_cpu_utilization: 0.95 #CPU-Auslastungsfaktor, der den Start einer neuen Instanz auslöst(0.5 bis 0.Spezifiziert zwischen 95)
max_concurrent_requests: 80 #Zulässige Anzahl gleichzeitiger Anfragen(Der maximale Wert, der angegeben werden kann, ist 80)
#Umgebungsvariablen festlegen
env_variables:
JAVA_TOOL_OPTIONS: "-XX:MaxRAM=256m -XX:ActiveProcessorCount=2 -Xmx32m"
Referenz:
HelloworldApplication.java
Anwendungsklasse. Ich schreibe nur die Routineverarbeitung für die Verwendung von Spring Boot.
package com.example.helloworld;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
}
HelloworldController.java
Controller-Klasse.
package com.example.helloworld;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloworldController {
/**
* application.Nachricht von yml erhalten.
*/
@Value("${application.message}")
private String applicationYamlMessage;
/**
*Gibt die Antwort der oberen Seite zurück.
*
* @Informationen zur Seitenanzeige zurückgeben
*/
@GetMapping("/")
public ModelAndView index() {
System.out.println("HelloworldController#index");
//Stellen Sie die anzuzeigenden Daten ein
ModelAndView mav = new ModelAndView();
mav.addObject("applicationYamlMessage", applicationYamlMessage);
mav.setViewName("helloworld"); //Name anzeigen. Geben Sie die Thymeleaf-Vorlagendatei an
return mav;
}
/**
*Eine Testmethode, die eine Fehlerseite anzeigt.
*/
@GetMapping("/exception/")
public void exception() {
System.out.println("HelloworldController#exception");
throw new RuntimeException("This is a sample exception.");
}
}
HelloworldErrorController.java
Fehlercontroller-Klasse für die gesamte Webanwendung. Es verarbeitet Nicht gefunden usw., die von einer allgemeinen Controller-Klasse nicht erfasst werden können. Hier wird nur die Mindestverarbeitung beschrieben, die Sie jedoch nach Bedarf anpassen können.
package com.example.helloworld;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
/**
*Fehlercontroller für die gesamte Webanwendung.
*Eine Implementierungsklasse für die ErrorController-Schnittstelle.
*/
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}") //Zuordnung zur Fehlerseite
public class HelloworldErrorController implements ErrorController {
/**
*Fehlerseitenpfad.
*/
@Value("${server.error.path:${error.path:/error}}")
private String errorPath;
/**
*Gibt den Pfad der Fehlerseite zurück.
*
* @Rückgabe des Fehlerseitenpfads
*/
@Override
public String getErrorPath() {
return errorPath;
}
/**
*Gibt ein ModelAndView-Objekt für die Antwort zurück.
*
* @param req Anforderungsinformationen
* @param mav Antwortinformationen
* @ModelAndView-Objekt für die Rückgabe einer HTML-Antwort
*/
@RequestMapping
public ModelAndView error(HttpServletRequest req, ModelAndView mav) {
System.out.println("HelloWorldErrorController#error");
//404 Für keinen Fehler gefunden
//Der Statorcode und der Ausgabeinhalt können nach Bedarf angepasst werden.
mav.setStatus(HttpStatus.NOT_FOUND);
mav.setViewName("error"); // error.html
return mav;
}
}
application.yml
Eine Datei, die Informationen zu Webanwendungseinstellungen beschreibt. Es können auch application.properties sein. Dieses Mal werden nur die für die Anwendung eindeutigen Informationen festgelegt.
application:
message: Hello, application yaml.
helloworld.png
Ein als Beispiel platziertes Bild, das den statischen Dateispeicher zeigt. Wenn Sie die statische Datei in src / main / resources / static ablegen, wird sie http: // hostname / zugeordnet. Wenn Sie diesmal auf http: //hostname/assets/helloworld.png zugreifen, wird die Datei src / main / resources / static / assets / helloworld.png bereitgestellt.
error.html
HTML Thymeleaf-Vorlagendatei, die angezeigt wird, wenn ein Fehler auftritt. Diesmal ist der dynamische Wert nicht eingebettet, es ist jedoch möglich, den Wert in der Fehlercontrollerklasse nach Bedarf festzulegen und so anzupassen, dass er auf der Vorlagenseite angezeigt wird.
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>404 Not Found</title>
</head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
helloworld.html
Eine HTML-Thymeleaf-Vorlagendatei zum Anzeigen der von der Controller-Klasse festgelegten Werte.
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Hello, world.</title>
</head>
<body>
<h1>Hello, world.</h1>
<div th:text="'application.yml: ' + ${applicationYamlMessage}"></div>
<div><img src="./assets/helloworld.png "></div>
</body>
</html>
HelloworldApplicationTests.java
Minimale Testklasse. Es werden nur formale Dinge beschrieben. Testet eigentlich nichts.
package com.example.helloworld;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class HelloworldApplicationTests {
@Test
void contextLoads() {
}
}
Sie können den Test mit der Gradle-Testaufgabe ausführen.
$ gradle test
Sie können den lokalen Server http: // localhost: 8080 / mit gradle bootRun starten.
$ gradle bootRun
Die bootRun-Task ist eine Funktion des Spring Boot Gradle-Plugins, sodass die Konfigurationsdatei app.yaml für die Google App Engine nicht geladen wird.
Kann mit gradle appengineDeploy in Google App Engine bereitgestellt werden.
$ gradle appengineDeploy
Sie können die Liste der verfügbaren Aufgaben in Gradle-Aufgaben anzeigen.
$ gradle tasks
> Task :tasks
------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------
App Engine app.yaml based projects tasks
----------------------------------------
appengineCloudSdkLogin - Login and set the Cloud SDK common configuration user
appengineDeploy - Deploy an App Engine application
appengineDeployAll - Deploy an App Engine application and all of its config files
appengineDeployCron - Deploy Cron configuration
appengineDeployDispatch - Deploy Dispatch configuration
appengineDeployDos - Deploy Dos configuration
appengineDeployIndex - Deploy Index configuration
appengineDeployQueue - Deploy Queue configuration
appengineShowConfiguration - Show current App Engine plugin configuration
appengineStage - Stage an App Engine app.yaml based project for deployment
checkCloudSdk - Validates the Cloud SDK
downloadCloudSdk - Download the Cloud SDK
Application tasks
-----------------
bootRun - Runs this project as a Spring Boot application.
(Folgendes wird weggelassen)
Recommended Posts