Il runtime Java

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 comando gcloud 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.7.0</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 e operating_system nel app.yaml per specificare un sistema operativo.

  • Se vuoi, puoi specificare una versione di runtime includendo l'impostazione runtime_version nel 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 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:

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

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