Il runtime Java è lo stack software responsabile dell'installazione del codice e delle dipendenze dell'applicazione, nonché dell'esecuzione dell'applicazione nell'ambiente flessibile.
La versione
11
e successive sono create utilizzando buildpacks, che richiede la scelta un sistema operativo nel fileapp.yaml
. Ad esempio, per Java 21, devi specificare Ubuntu 22 come sistema operativo.Il runtime Java 8/Jetty 9 fornisce a OpenJDK 8 ed Eclipse Jetty 9 il supporto per la specifica Java Servlet 3.1. Il molo eredita dall'immagine OpenJDK.
Per l'elenco completo delle versioni Java supportate e della relativa versione di Ubuntu, consulta la pianificazione del supporto del runtime.
Prerequisiti
Per utilizzare il runtime Java:
Devi installare gcloud CLI versione 420.0.0 o successive. Puoi aggiornare gli strumenti dell'interfaccia a riga di comando eseguendo
gcloud components update
. Per visualizzare la versione installata, puoi eseguire Comandogcloud version
.Per eseguire il deployment tramite Maven, dovrai aggiungere Plug-in Maven per App Engine sul tuo
pom.xml
:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.7.0</version> </plugin>
Altre opzioni per il deployment includono il comando
gcloud app deploy
o plug-in Gradle di App Engine.
Organizzare i file
La struttura dell'albero di origine dovrebbe essere simile alla seguente:
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]
Scegli una versione di Java
Nuove versioni del runtime
Per Java runtime versione 11 e successive, devi includere il parametro
Impostazioni di runtime_config
e operating_system
in
app.yaml
da specificare
di un sistema operativo.
Facoltativamente, puoi specificare una versione del runtime includendo l'elemento runtime_version
nel tuo file app.yaml
. Per impostazione predefinita, viene utilizzata la versione Java più recente se
l'impostazione runtime_version
non è specificata.
Esempi
Per specificare Java 21 su Ubuntu 22:
runtime: java env: flex runtime_config: operating_system: "ubuntu22" runtime_version: "21"
Per specificare l'ultima versione di Java supportata su Ubuntu 22:
runtime: java env: flex runtime_config: operating_system: "ubuntu22"
Versioni precedenti del runtime
Per Java 8, specifica le impostazioni runtime_config
e jdk
nel
app.yaml
.
Java 8 supporta:
- Il runtime di Eclipse Jetty 9 ed esegue Jetty 9 usando Servlet 3.1.
- Il tuo codice server in ascolto sulla porta 8080 come parte un'applicazione. Questa funzionalità ti consente di utilizzare framework di microservizi come SparkJava e Spring-Boot.
Esempi
Specificare la versione 9 di Jetty (predefinita / facoltativa):
runtime_config: jdk: openjdk8 server: jetty9
Specifica della versione Java 8:
runtime_config: jdk: openjdk8
Esempio di
app.yaml
per Java 8:
Consulta pom.xml
per la configurazione di Maven e build.gradle
per la configurazione di Gradle.
File facoltativi
Questi file di configurazione sono facoltativi:
Posiziona questi file al livello superiore di MyDir. Se utilizzi uno di questi file,
devi eseguirne il deployment separatamente con il comando gcloud app deploy
.
web.xml
è facoltativo ed è necessario solo se non utilizzi le annotazioni Servlet 3.x.
Puoi inserire contenuti web statici, nonché le tue pagine JavaServer, nella directory webapp/
.
Jetty 9, che l'ambiente flessibile di App Engine utilizza come contenitore Servlet, utilizza
Apache Jasper come implementazione JSP predefinita e include le taglib JSTL.
Il file Dockerfile è facoltativo ed è utilizzato per personalizzare Java runtime.
Attivazione della compressione gzip
L'handler gzip
è incluso in Jetty, ma non è attivato per impostazione predefinita. A
attiva questo modulo, imposta la variabile di ambiente JETTY_MODULES_ENABLE=gzip
nel file app.yaml
:
env_variables:
JETTY_MODULES_ENABLE: 'gzip'
Utilizzo della guida rapida
Jetty
può velocizzare
l'ora di inizio dell'applicazione eseguendo la scansione preliminare dei contenuti e generando
file di configurazione.
Se utilizzi un
immagine estesa
puoi attivare la guida rapida eseguendo /scripts/jetty/quickstart.sh
nel
Dockerfile, dopo l'aggiunta dell'applicazione WAR.
Variabili di ambiente
Puoi impostare le seguenti variabili di ambiente facoltative specifiche per il runtime di Java 8/Jetty 9. Puoi anche impostare le variabili di ambiente OpenJDK 8.
Per impostare le variabili di ambiente, utilizza la chiave env_variables
nel file app.yaml
.
Var. ambiente | Maven Prop | Valore/commento |
---|---|---|
JETTY_PROPERTIES |
Elenco separato da virgole di name=value coppie aggiunto a $JETTY_ARGS |
|
JETTY_MODULES_ENABLE |
Elenco separato da virgole di moduli da attivare aggiungendoli a $JETTY_ARGS |
|
JETTY_MODULES_DISABLE |
Elenco separato da virgole di moduli da disattivare rimuovendoli da $JETTY_BASE/start.d |
|
JETTY_ARGS |
Argomenti passati all'elemento start.jar del molo. Eventuali argomenti utilizzati per la configurazione del molo personalizzato devono essere passati qui. |
|
JAVA_OPTS |
Argomenti di runtime JVM |
Cloud Logging avanzato (beta)
Quando esegui l'applicazione nell'ambiente flessibile App Engine, puoi configurare Java Util logging per inviare i log a Cloud Logging impostando la variabile di ambiente JETTY_ARGS
. Ad esempio:
env_variables:
JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties
Devi fornire un file logging.properties che configuri un LoggingHandler come segue:
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
Test locale
Durante il test nel tuo ambiente locale, potresti utilizzare Google Cloud emulato anziché dai servizi Google Cloud remoti. Puoi utilizzare le seguenti opzioni emulatori:
Usa il comando gcloud
per avviarle prima di eseguire l'app:
gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start
Maven
Aggiungi queste righe al file pom.xml
Maven per aggiungere il
plug-in Maven Jetty 9:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.2.v20170220</version>
</plugin>
Per eseguire l'app in locale, utilizza il comando Maven:
mvn jetty:run-exploded
Gradle
Segui le istruzioni per la creazione di un nuovo progetto Gradle per aggiungere il
plug-in Gradle Gretty al tuo build.gradle
e utilizza il comando:
gradle jettyRun
Deployment dell'app
Per inizializzare Google Cloud CLI, esegui:
gcloud init
Dopo aver completato le configurazioni, puoi utilizzare Google Cloud CLI per eseguire il deployment di questa directory contenente i file app.yaml
e WAR utilizzando:
gcloud app deploy app.yaml
Se utilizzi uno dei file di configurazione facoltativi (index.yaml
,
cron.yaml
e dispatch.yaml
), esegui il deployment separatamente con il comando gcloud
. Ad esempio:
gcloud app deploy cron.yaml
Maven
Utilizza Maven per eseguire il deployment della tua app:
mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID
Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud. Se il tuo file pom.xml
specifica già il tuo ID progetto, non devi includere la proprietà -Dapp.deploy.projectId
nel comando eseguito.
Gradle
Utilizza Gradle per eseguire il deployment dell'app:
gradle appengineDeploy
Personalizzazione del runtime Java 8 / Jetty 9
Non è necessario un Dockerfile per eseguire il deployment dell'app nel runtime Java 8/Jetty 9. Se la tua app richiede una configurazione aggiuntiva, puoi fornire esplicitamente un Dockerfile per personalizzare il runtime Java. Il Dockerfile deve includere l'immagine di base. Puoi aggiungere direttive aggiuntive al Dockerfile per personalizzare il runtime Java. Consulta: Creazione di runtime personalizzati.
In questo caso, your-application.war
è il nome del file WAR compilato
nella directory target/
(Maven) o build/staged-app/
(Gradle).