Il runtime Java è lo stack software responsabile dell'installazione del codice e delle dipendenze dell'applicazione, nonché dell'esecuzione dell'applicazione nell'ambiente flessibile.
Versioni Java
Java 21 utilizza buildpack. I buildpack ti aiutano a creare e configurare i container che puoi eseguire in Google Cloud.
Per l'elenco completo delle versioni Java supportate e della corrispondente versione di Ubuntu, consulta la pianificazione del supporto del runtime.
Per utilizzare una versione Java supportata, devi:
Installa la versione 420.0.0 o successive di gcloud CLI. Puoi aggiornare gli strumenti CLI eseguendo il comando
gcloud components update
. Per visualizzare la versione installata, puoi eseguire il comandogcloud version
.Per eseguire il deployment utilizzando Maven, devi aggiungere il plug-in Maven per App Engine al tuo
pom.xml
:<plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>appengine-maven-plugin</artifactId> <version>2.8.1</version> </plugin>
Altre opzioni per il deployment includono il comando
gcloud app deploy
o il plug-in Gradle App Engine.Includi le impostazioni
runtime_config
eoperating_system
nelapp.yaml
per specificare un sistema operativo.Se vuoi, puoi specificare una versione di runtime includendo l'impostazione
runtime_version
nel fileapp.yaml
. Per impostazione predefinita, viene utilizzata la versione Java più recente se l'impostazioneruntime_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 la versione Java più recente supportata su Ubuntu 22:
runtime: java env: flex runtime_config: operating_system: "ubuntu22"
Versioni precedenti dell'ambiente di runtime
Per Java 8, specifica le impostazioni runtime_config
e jdk
nel
app.yaml
file.
Java 8 supporta:
Il runtime Eclipse Jetty 9 esegue Jetty 9 utilizzando Servlet 3.1.
Il tuo codice server che rimane in ascolto sulla porta 8080 nell'ambito della tua applicazione. Questa funzionalità ti consente di utilizzare framework di microservizi come SparkJava e Spring-Boot.
Esempi
Specifica la versione 9 di Jetty (predefinita / facoltativa):
runtime_config: jdk: openjdk8 server: jetty9
Specifica la versione Java 8:
runtime_config: jdk: openjdk8
Esempio
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 e 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 viene utilizzato dall'ambiente flessibile di App Engine come contenitore Servlet, utilizza
Apache Jasper come implementazione JSP predefinita e include le taglib JSTL.
Il file Dockerfile è facoltativo e viene utilizzato per personalizzare il runtime Java.
Attivazione della compressione gzip
L'handler gzip
è incluso in Jetty, ma non è attivato per impostazione predefinita. Per attivare 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 configurazione rapida eseguendo /scripts/jetty/quickstart.sh
nel Dockerfile dopo aver aggiunto il file WAR dell'applicazione.
Variabili di ambiente
Puoi impostare le seguenti variabili di ambiente facoltative specifiche per il runtime 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
.
Variabile di ambiente | Maven Prop | Valore/commento |
---|---|---|
JETTY_PROPERTIES |
Elenco separato da virgole di coppie name=value aggiunte 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 a start.jar di Jetty. Tutti gli argomenti utilizzati per la configurazione personalizzata di Jetty devono essere passati qui. |
|
JAVA_OPTS |
Argomenti di runtime della JVM |
Cloud Logging avanzato (beta)
Quando esegui l'applicazione nell'ambiente flessibile di 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
Supporto di altri runtime Java
Se devi utilizzare una versione di Java non supportata, puoi creare un runtime personalizzato e selezionare un'immagine di base valida con la versione di Java di cui hai bisogno.
Per le immagini di base fornite da Google o per le immagini di base Java Docker, consulta Creare runtime personalizzati.
Organizzare i file
La struttura della sorgente 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]
Test locale
Quando esegui test nel tuo ambiente locale, puoi utilizzare i servizi Google Cloud simulati anziché i servizi Google Cloud remoti. Puoi utilizzare i seguenti emulatori:
Utilizza il comando gcloud
per avviarli 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
esegui il 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
), eseguine il deployment separatamente con il comando gcloud
. Ad esempio:
gcloud app deploy cron.yaml
Maven
Utilizza Maven per eseguire il deployment dell'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 è necessario includere la proprietà -Dapp.deploy.projectId
nel comando eseguito.
Gradle
Utilizza Gradle per eseguire il deployment dell'app:
gradle appengineDeploy