Die Java-Laufzeit

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.

  • Die Versionen 11 und höher werden mit Buildpacks erstellt. Dazu müssen Sie ein Betriebssystem in der app.yaml-Datei auswählen. Wenn Sie beispielsweise Java 21 verwenden möchten, müssen Sie Ubuntu 22 als Betriebssystem angeben.

  • Die Java 8-/Jetty 9-Laufzeit bietet OpenJDK 8 und Eclipse Jetty 9 mit Unterstützung für die Java Servlet 3.1-Spezifikation. Das Jetty-Image wird vom OpenJDK-Image übernommen.

Eine vollständige Liste der unterstützten Java-Versionen und der entsprechenden Ubuntu-Versionen finden Sie im Laufzeitsupportzeitplan.

Vorbereitung

So verwenden Sie die Java-Laufzeit:

  • Sie müssen die gcloud CLI-Version 420.0.0 oder höher installieren. Sie können die Befehlszeilentools mit dem Befehl gcloud components update aktualisieren. Zum Aufrufen der installierten Version können Sie den Befehl gcloud 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.

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]

Java-Version auswählen

Neue Laufzeitversionen

Für die Java-Laufzeit Version 11 und höher müssen Sie die Einstellungen runtime_config und operating_system in die Datei app.yaml einfügen, um ein Betriebssystem anzugeben.

Optional: Sie können eine Laufzeitversion angeben. Nehmen Sie dazu die Einstellung runtime_version in die Datei app.yaml auf. Standardmäßig wird die neueste Python-Version verwendet, wenn die Einstellung runtime_version nicht angegeben ist.

Beispiele

  • So geben Sie Java 21 unter 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:

    runtime: java
    env: flex
    
    handlers:
    - url: /.*
      script: this field is required, but ignored

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)

Beim Ausführen in der flexiblen App Engine-Umgebung können Sie Javautil Logging so konfigurieren, dass Logs an Cloud Logging gesendet werden, indem Sie die Umgebungsvariable JETTY_ARGS festlegen. Beispiele:

 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

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 Ihrer Anwendung:

gradle appengineDeploy

Java 8-/Jetty 9-Laufzeit anpassen

Sie brauchen kein Dockerfile, um Ihre Anwendung in der Java 8-/Jetty 9-Laufzeit zu implementieren. Wenn Ihre Anwendung eine zusätzliche Konfiguration erfordert, können Sie zum Anpassen der Java-Laufzeit explizit ein Dockerfile bereitstellen. Das Dockerfile muss das Basis-Image enthalten. Sie können dem Dockerfile zusätzliche Anweisungen hinzufügen, um die Java-Laufzeit anzupassen. Siehe Benutzerdefinierte Laufzeiten erstellen.

In diesem Fall ist your-application.war der Name der erstellten WAR-Datei in Ihrem target/-Verzeichnis (Maven) oder build/staged-app/ (Gradle).