Auf dieser Seite wird beschrieben, wie Sie die gebündelten Dienste mit der neuesten unterstützten Java-Version für die App Engine-Standardumgebung installieren und verwenden. Ihre Anwendung kann über die App Engine API-JAR auf die gebündelten Dienste zugreifen.
Hinweise
Weitere Informationen finden Sie in der Liste der gebündelten Legacy-Dienst-APIs, die Sie in der neuesten unterstützten Java-Version aufrufen können.
Für diese Seite muss in Ihrer App Java 11 oder höher ausgeführt werden. Wenn Sie Ihre Anwendung von der Laufzeit der ersten Generation zur Laufzeit der zweiten Generation migrieren möchten, lesen Sie die Unterschiede zwischen Java 8 und Java 11+ und die Überlegungen zur Migration.
Wenn Sie gebündelte Legacy-Dienste verwenden und ein Upgrade auf Java 21 durchführen möchten, finden Sie unter Vorhandene Anwendung aktualisieren weitere Informationen zu Ihren Konfigurationsoptionen.
App Engine API-JAR installieren
Wenn Sie in Ihrer neuesten unterstützten Java-Anwendung gebündelte Legacy-Dienste nutzen möchten, müssen Sie zum Konfigurieren der Anwendung anstelle der Datei app.yaml
die Datei appengine-web.xml
verwenden.
Das folgende Beispiel zeigt, wie Sie Konfigurationseinstellungen in appengine-web.xml
für Version 21 und höher auf EE10 (Standard), Version 21 auf EE8 und Version 17 und früher hinzufügen. Um die neueste unterstützte Version für die Standardkonfiguration zu verwenden, müssen Sie die Anwendungs-Servlets und -Abhängigkeiten so aktualisieren, dass sie den Namespace Jakarta
enthalten. Weitere Informationen zu den Konfigurationsoptionen finden Sie unter Vorhandene Anwendung aktualisieren.
Fügen Sie der Datei appengine-web.xml
je nach Java-Version die folgenden Einstellungen hinzu:
v21 und höher (EE10)
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<runtime>java21</runtime> <!-- or another supported version -->
<app-engine-apis>true</app-engine-apis>
</appengine-web-app>
v21 (EE8)
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<runtime>java21</runtime>
<system-properties> <!-- run your apps on EE8 -->
<property name="appengine.use.EE8" value="true"/>
</system-properties>
<app-engine-apis>true</app-engine-apis>
</appengine-web-app>
v17 und älter
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<runtime>java17</runtime> <!-- or another supported version -->
<app-engine-apis>true</app-engine-apis>
</appengine-web-app>
Wenn Sie die gebündelten Legacy-Dienste als Abhängigkeit angeben möchten, fügen Sie der Datei pom.xml
die folgenden Zeilen hinzu:
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>2.0.4</version> <!-- or later-->
</dependency>
Wenn Ihre Anwendung eine web.xml
-Datei verwendet, müssen Sie darin das Element <app-engine-apis>
hinzufügen und dafür true
festlegen:
<app-engine-apis>true</app-engine-apis>
Führen Sie zum Bereitstellen der Java 21-Anwendung den Befehl mvn appengine:deploy
oder den Befehl gcloud app deploy ~/my_app/WEB-INF/appengine-web.xml
in einer kompilierten und bereitgestellten Webanwendung aus.
Von Java 21 verwendeter Standardeinstiegspunkt
Java 21-Anwendungen können beim Starten der JVM für Webanwendungen von einer zusätzlichen Nutzerkonfiguration profitieren.
Der Standardeinstiegspunkt, der zum Booten der JVM verwendet wird, wird von App Engine-Buildpacks generiert.
Im Wesentlichen entspricht dies dem Definieren dieses Einstiegspunkts in der Datei appengine-web.xml
. Beispiel:
java --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED -showversion -Xms32M -Xmx204M -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:+PrintCommandLineFlags -Dclasspath.runtimebase=/base/java_runtime -Djava.class.path=/base/java_runtime/runtime-main.jar -Djava.library.path=/base/java_runtime: com/google/apphosting/runtime/JavaRuntimeMainWithDefaults --fixed_application_path=/workspace /base/java_runtime
Es wird nicht empfohlen, diesen Standardeinstiegspunkt zu ändern, da die Speichereinstellungen basierend auf dem Instanztyp (F1, F2, F4) und dem verfügbaren Speicher berechnet werden.
Standardmäßig verwenden wir --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio.charset=ALL-UNNAMED
, um einige erforderliche JDK APIs zu öffnen.
Einstiegspunkt-Features
Der Einstiegspunkt für die Java-Versionen der zweiten Generation kann mit benutzerdefinierten Umgebungsvariablen angepasst werden, die der Konfigurationsdatei appengine-web.xml
hinzugefügt wurden.
In der folgenden Tabelle werden die Umgebungsvariablen, die zum Aktivieren/Deaktivieren/Konfigurieren von Features verwendet werden können, sowie die Standardwerte angegeben, sofern sie nicht festgelegt sind:
Umgebungsvariable | Beschreibung | Typ | Standard |
---|---|---|---|
CPROF_ENABLE |
Stackdriver Profiler | boolean | false |
GAE_MEMORY_MB |
Verfügbarer Speicher | Größe | Von App Engine oder /proc/meminfo -400M festgelegt |
HEAP_SIZE_RATIO |
Speicher für den Heap | Prozent | 80 |
HEAP_SIZE_MB |
Verfügbarer Heap | Größe | ${HEAP_SIZE_RATIO} % von ${GAE_MEMORY_MB} |
JAVA_HEAP_OPTS |
JVM-Heap-Arg. | JVM-Arg. | -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M |
JAVA_GC_OPTS |
JVM-GC-Argumente | JVM-Arg. | -XX:+UseG1GC plus Konfiguration |
JAVA_USER_OPTS |
Sonstige JVM-Arg. | JVM-Arg. | |
JAVA_OPTS |
JVM-Arg. | JVM-Arg. | Siehe unten |
Wenn nicht explizit festgelegt, wird für JAVA_OPTS
automatisch die Standardeinstellung verwendet:
JAVA_OPTS:=-showversion \
$JAVA_HEAP_OPTS \
$JAVA_GC_OPTS \
$JAVA_USER_OPTS
Wenn CPROF_ENABLE
"true" ist, fügt der Standardeinstiegspunkt den PROFILER_AGENT
so hinzu:
-agentpath:/opt/cprof/profiler_java_agent.so=--logtostderr
Wenn Ihr Anwendungscode beispielsweise mehrere -add-opens
-Flags benötigt, können Sie die in der Datei appengine-web.xml
definierte Umgebungsvariable JAVA_USER_OPTS
verwenden:
<env-variables>
<env-var name="JAVA_USER_OPTS" value="--add-opens java.base/java.util=ALL-UNNAMED" />
</env-variables>
Hinweise zur Migration
Beachten Sie die folgenden Überlegungen, wenn Sie zu einer Java-Laufzeit der zweiten Generation migrieren und Ihre Anwendung gebündelte Legacy-Dienste verwendet:
- Wenn Sie die Funktionen der gebündelten Legacy-Dienste in Ihrer Java-Anwendung der zweiten Generation testen möchten, können Sie den lokalen Entwicklungsserver verwenden.
- Im Gegensatz zur Java 8-Laufzeit enthalten die Java-Laufzeiten der zweiten Generation JVM als Teil des Instanzspeichers. Wenn in den Logs speicherbezogene Fehler auftreten, können Sie die Größe der Instanzklasse in der Datei
appengine-web.xml
erhöhen. - Wenn Ihre Anwendung versucht, eine API aufzurufen, die für die Java-Laufzeiten der zweiten Generation nicht aktiviert ist, erhalten Sie die Fehlermeldung
com.google.apphosting.api.ApiProxy$FeatureNotEnabledException
. - Es wird davon ausgegangen, dass alle Anwendungen in den Java-Laufzeiten der zweiten Generation threadsicher sind. Sie müssen das Element
threadsafe
in der Dateiapp.yaml
oderappengine-web.xml
entfernen, wenn Sie ein Upgrade auf Java 11+-Laufzeiten ausführen.
Beispiel (Datastore)
Ein Beispiel für die Verwendung von Firestore im Datastore-Modus (Datastore) finden Sie in den gebündelten Legacy-Diensten für das Java 11-Codebeispiel in GitHub.