Il runtime Java

Il runtime Java è lo stack software responsabile dell'installazione del codice e delle dipendenze dell'applicazione e della sua esecuzione nell'ambiente flessibile.

Versioni di Java

Java 21 utilizza buildpack. I buildpack ti aiutano a creare e configurare container che puoi eseguire il deployment su Google Cloud.

Per l'elenco completo delle versioni di Java supportate e della versione di Ubuntu corrispondente, consulta la pianificazione del supporto del runtime.

Per utilizzare una versione di Java supportata, devi:

  • Installa gcloud CLI versione 420.0.0 o successive. 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.8.1</version>
    </plugin>

    Altre opzioni di deployment includono il comando gcloud app deploy o il plug-in Gradle di App Engine.

  • Includi le impostazioni runtime_config e operating_system nel file app.yaml per specificare un sistema operativo.

  • Se vuoi, puoi specificare una versione del runtime includendo l'impostazione runtime_version nel file app.yaml. Per impostazione predefinita, viene utilizzata l'ultima versione di Java 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 dell'ambiente di runtime

Per Java 8, specifica le impostazioni runtime_config e jdk nel file app.yaml.

Java 8 supporta:

  • Il runtime Eclipse Jetty 9 ed esegue Jetty 9 utilizzando Servlet 3.1.

  • Il codice del tuo server che rimane in ascolto sulla porta 8080 come parte della tua applicazione. Questa funzionalità ti consente di utilizzare framework di microservizi come SparkJava e Spring-Boot.

Esempi

  • Specifica della versione 9 di Jetty (predefinita / facoltativa):

      runtime_config:
        jdk: openjdk8
        server: jetty9
    
  • Specifica della versione 8 di Java:

      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 configurare Maven e build.gradle per configurare Gradle.

File opzionali

Questi file di configurazione sono facoltativi:

Posiziona questi file al primo livello 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 pagine JavaServer, nella directory webapp/. Jetty 9, che l'ambiente flessibile App Engine utilizza come contenitore Servlet, utilizza Apache Jasper come implementazione JSP predefinita e include le librerie di tag JSTL.

Il file Dockerfile è facoltativo e viene utilizzato per personalizzare il runtime Java.

Abilitazione della compressione gzip

Il gestore 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 di Avvio rapido

Jetty può velocizzare l'avvio dell'applicazione eseguendo la pre-scansione dei contenuti e generando i file di configurazione. Se utilizzi un'immagine estesa, puoi attivare l'avvio rapido 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 l'ambiente di 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.

Env Var 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 dei moduli da disattivare rimuovendoli da $JETTY_BASE/start.d
JETTY_ARGS Argomenti passati a start.jar di Jetty. Qui devono essere passati tutti gli argomenti utilizzati per la configurazione jetty personalizzata.
JAVA_OPTS Argomenti di runtime JVM

Cloud Logging avanzato (beta)

Quando viene eseguito 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 nel seguente modo:

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 che ti serve.

Per le immagini di base fornite da Google o le immagini di base Docker Java, consulta Creazione di runtime personalizzati.

Organizzare i file

L'albero delle origini dovrebbe avere il seguente aspetto:

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 i test nel tuo ambiente locale, puoi utilizzare servizi Google Cloudemulati anziché 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 maven pom.xml 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 riportate in Creazione di un nuovo progetto Gradle per aggiungere il plug-in Gretty Gradle 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à l'ID progetto, non devi includere la proprietà -Dapp.deploy.projectId nel comando che esegui.

Gradle

Utilizza Gradle per eseguire il deployment della tua app:

gradle appengineDeploy