Die Java-Laufzeit ist das Softwarepaket, das für die Installation Ihres Anwendungscodes und der Abhängigkeiten sowie für die Ausführung dieser Anwendung in der flexiblen Umgebung verantwortlich ist.
Java-Versionen
Java 21 verwendet buildpacks. Mit Buildpacks können Sie Container erstellen und konfigurieren, die Sie in Google Cloud bereitstellen können.
Eine vollständige Liste der unterstützten Java-Versionen und der entsprechenden Ubuntu-Versionen finden Sie im Laufzeitsupportzeitplan.
So verwenden Sie eine unterstützte Java-Version:
Installieren Sie die CLI-Version 420.0.0 oder höher. Sie können die Befehlszeilentools mit dem Befehl
gcloud components update
aktualisieren. Zum Aufrufen der installierten Version können Sie den Befehlgcloud version
ausführen.Für die Bereitstellung mithilfe von Maven müssen Sie das App Engine-Maven-Plug-in in
pom.xml
aufnehmen:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.8.1</version> </plugin>
Die Bereitstellung ist außerdem über den Befehl
gcloud app deploy
oder das Gradle-Plug-in für App Engine möglich.Fügen Sie die Einstellungen
runtime_config
undoperating_system
in die Dateiapp.yaml
ein, um ein Betriebssystem anzugeben.Optional: Sie können eine Laufzeitversion angeben. Nehmen Sie dazu die Einstellung
runtime_version
in die Dateiapp.yaml
auf. Standardmäßig wird die neueste Java-Version verwendet, wenn die Einstellungruntime_version
nicht angegeben ist.Beispiele
So geben Sie Java 21 auf Ubuntu 22 an:
runtime: java env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "21"
So geben Sie die neueste unterstützte Java-Version unter Ubuntu 22 an:
runtime: java env: flex runtime_config: operating_system: "ubuntu22"
Vorherige Laufzeitversionen
Geben Sie für Java 8 die Einstellungen runtime_config
und jdk
in der Datei app.yaml
an.
Java 8 unterstützt:
Die Eclipse Jetty 9-Laufzeit und führt Jetty 9 mit Servlet 3.1 aus.
Ihr eigener Servercode, der Port 8080 als Teil Ihrer Anwendung überwacht. Mit dieser Funktion können Sie Microservice-Frameworks wie SparkJava und Spring-Boot verwenden.
Beispiele
Jetty-Version 9 (Standard / optional) angeben:
runtime_config: jdk: openjdk8 server: jetty9
Java-Version 8 angeben:
runtime_config: jdk: openjdk8
Beispiel
app.yaml
für Java 8:
Informationen zum Konfigurieren von Maven und zum Konfigurieren von Gradle finden Sie unter pom.xml
und build.gradle
.
Optionale Dateien
Die folgenden Konfigurationsdateien sind optional:
Platzieren Sie diese Dateien auf der obersten Ebene von MyDir. Wenn Sie diese Dateien verwenden, müssen Sie sie separat mit dem Befehl gcloud app deploy
bereitstellen.
Die Datei web.xml
ist optional und wird nur benötigt, wenn Sie keine Servlet 3.x-Anmerkungen verwenden.
Sie können statische Webinhalte sowie Ihre JavaServer-Seiten in Ihrem webapp/
-Verzeichnis ablegen.
Die flexible Umgebung von App Engine verwendet als Servlet-Container Jetty 9, das wiederum
Apache Jasper als Standard-JSP-Implementierung verwendet und JSTL-Taglibs umfasst.
Die Dockerfile-Datei ist optional und wird zum Anpassen der Java-Laufzeit verwendet.
gzip-Komprimierung aktivieren
Der Handler für gzip
wird zusammen mit Jetty bereitgestellt, ist aber standardmäßig nicht aktiviert. Um dieses Modul zu aktivieren, legen Sie die Umgebungsvariable JETTY_MODULES_ENABLE=gzip
in der Datei app.yaml
fest:
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
Schnellstart verwenden
Jetty kann den Start Ihrer Anwendung beschleunigen, wenn der Inhalt vorab gescannt wird und Konfigurationsdateien erzeugt werden.
Wenn Sie ein erweitertes Image verwenden, können Sie den Schnellstart aktivieren, indem Sie /scripts/jetty/quickstart.sh
in Ihrem Dockerfile ausführen, nachdem die Anwendungs-WAR hinzugefügt wurde.
Umgebungsvariablen
Sie können die folgenden optionalen Umgebungsvariablen festlegen, die für die Java 8-/Jetty 9-Laufzeit spezifisch sind. Sie können auch OpenJDK 8-Umgebungsvariablen festlegen.
Zum Festlegen von Umgebungsvariablen verwenden Sie den Schlüssel env_variables
in der Datei app.yaml
.
Umgebungsvariable | Maven-Eigenschaft | Wert/Kommentar |
---|---|---|
JETTY_PROPERTIES |
Kommagetrennte Liste von name=value Paaren, die an $JETTY_ARGS angehängt sind |
|
JETTY_MODULES_ENABLE |
Kommagetrennte Liste der Module, die durch Anhängen an $JETTY_ARGS aktiviert werden sollen |
|
JETTY_MODULES_DISABLE |
Kommagetrennte Liste der Module, die durch Entfernen aus $JETTY_BASE/start.d deaktiviert werden sollen |
|
JETTY_ARGS |
Argumente, die an start.jar von Jetty übergeben werden. Alle für die benutzerdefinierte Jetty-Konfiguration verwendeten Argumente sollten hier übergeben werden. |
|
JAVA_OPTS |
JVM-Laufzeitargumente |
Erweitertes Cloud-Logging (Betaversion)
Wenn Sie die Anwendung in der flexiblen App Engine-Umgebung ausführen, können Sie Java Util Logging so konfigurieren, dass Protokolle an Cloud Logging gesendet werden. Legen Sie dazu die Umgebungsvariable JETTY_ARGS
fest. Beispiel:
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
Sie müssen eine logging.properties-Datei bereitstellen, mit der ein LoggingHandler konfiguriert wird:
handlers=com.google.cloud.logging.LoggingHandler
# Optional configuration
.level=INFO
com.google.cloud.logging.LoggingHandler.level=FINE
com.google.cloud.logging.LoggingHandler.log=gae_app.log
com.google.cloud.logging.LoggingHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%3$s: %5$s%6$s
Unterstützung für andere Java-Laufzeiten
Wenn Sie eine Java-Version verwenden müssen, die nicht unterstützt wird, können Sie eine benutzerdefinierte Laufzeit erstellen und ein gültiges Basis-Image mit der von Ihnen benötigten Java-Version auswählen.
Informationen zu von Google bereitgestellten Basis-Images oder Docker-Basis-Images für Java finden Sie unter Benutzerdefinierte Laufzeiten erstellen.
Dateien organisieren
Der Quellbaum sollte so aussehen:
MyDir/ [pom.xml] [build.gradle] [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ [Dockerfile] java/ com.example.mycode/ MyCode.java webapp/ [index.html] [jsp.jsp] WEB-INF/ [web.xml]
Lokales Testen
Wenn Sie Tests in der lokalen Umgebung durchführen, können Sie anstelle der Remote-Clouddienste von Google emulierte Clouddienste von Google nutzen. Sie können die folgenden Emulatoren verwenden:
Verwenden Sie den Befehl gcloud
, um sie zu starten, bevor Sie die Anwendung ausführen:
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
Maven
Fügen Sie diese Zeilen in die Maven-Datei pom.xml
ein, um das Jetty 9-Maven-Plug-in hinzuzufügen:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.2.v20170220</version>
</plugin>
Verwenden Sie den Maven-Befehl, um Ihre Anwendung lokal auszuführen:
mvn jetty:run-exploded
Gradle
Gehen Sie so vor, wie in der Anleitung Neues Gradle-Projekt erstellen beschrieben, um das Gretty-Gradle-Plug-in in Ihre Datei build.gradle
aufzunehmen. Verwenden Sie den folgenden Befehl:
gradle jettyRun
Anwendung bereitstellen
Führen Sie zum Initialisieren der Google Cloud CLI Folgendes aus:
gcloud init
Nachdem Sie die Konfigurationen abgeschlossen haben, können Sie das Google Cloud CLI verwenden, um dieses Verzeichnis mit den app.yaml
- und WAR-Dateien so bereitzustellen:
gcloud app deploy app.yaml
Wenn Sie eine der optionalen Konfigurationsdateien (index.yaml
, cron.yaml
und dispatch.yaml
) verwenden, stellen Sie sie mit dem Befehl gcloud
separat bereit. Beispiele:
gcloud app deploy cron.yaml
Maven
Verwenden Sie Maven zum Bereitstellen der Anwendung:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts. Wenn in der Datei pom.xml
bereits Ihre Projekt-ID angegeben ist, müssen Sie das Attribut -Dapp.deploy.projectId
nicht in dem von Ihnen ausgeführten Befehl einfügen.
Gradle
Verwenden Sie Gradle zum Bereitstellen der Anwendung:
gradle appengineDeploy