Il runtime Java 8 non include alcun framework di servizi web. L'unico requisito è che la tua app sia in ascolto e risponda sulla porta 8080. Il codice campione qui mostra come aggiungere un framework personalizzato, ad esempio Spring Boot, al runtime Java 8.
Prerequisiti
Prima di iniziare a sviluppare, scarica la versione più recente di Google Cloud CLI o aggiorna gcloud CLI alla versione attuale:
gcloud components update
Per eseguire il deployment con Maven, devi aggiungere il plug-in Maven di App Engine a
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 l'utilizzo del comando
gcloud app deploy
o del plug-in Gradle di App Engine.Segui le istruzioni per il framework dell'applicazione per configurare la build di un JAR eseguibile. Questo JAR eseguibile deve essere eseguito tramite
java -jar app.jar
. Ad esempio, consulta la documentazione di Spring Boot.
Organizzazione dei file
La gerarchia dei file di sviluppo dovrebbe essere simile alla seguente:
MyDir/ pom.xml [index.yaml] [cron.yaml] [dispatch.yaml] src/main/ appengine/ app.yaml docker/ Dockerfile java/ com.example.mycode/ MyCode.java
app.yaml
È richiesto un file app.yaml
. Definisci un file simile al seguente:
runtime: java
env: flex
Specificando runtime: java
, l'immagine di runtime
gcr.io/google-appengine/openjdk:8
viene selezionata automaticamente quando esegui il deployment di un
file JAR (*.jar
).
Per selezionare una versione JDK, utilizza il campo runtime_config.jdk
.
runtime: java
env: flex
runtime_config:
jdk: openjdk8
Puoi trovare altre impostazioni di app.yaml
in Utilizzo di app.yaml.
File facoltativi
Questi file di configurazione sono facoltativi:
Posiziona questi file al livello superiore di MyDir
. Se utilizzi questi file, devi eseguirne il deployment separatamente con il comando gcloud app deploy
.
Punto di ingresso predefinito
Il punto di ingresso per l'immagine OpenJDK 8 è docker-entrypoint.bash
, che elabora gli argomenti della riga di comando passati per cercare un'alternativa eseguibile o argomenti per il comando predefinito (java
).
Se il primo argomento dell'immagine non è un eseguibile, il comando java
viene aggiunto implicitamente. Ad esempio:
$ docker run openjdk -jar /usr/share/someapplication.jar
Se il primo argomento dell'immagine è un eseguibile, come bash
, verrà eseguito quel comando.
Ad esempio, puoi eseguire una shell con:
> docker run -it --rm openjdk bash
root@c7b35e88ff93:/#
Variabili di ambiente
Utilizza la chiave env_variables
nel file app.yaml
per impostare le variabili di ambiente.
Ad esempio:
env_variables:
MY_VAR_COLOR: 'blue'
La seguente tabella elenca le variabili di ambiente che puoi utilizzare per abilitare, disabilitare o configurare le funzionalità.
Var amb. | Descrizione | Tipo | Predefinito |
---|---|---|---|
TMPDIR |
Directory temporanea | dirname | |
JAVA_TMP_OPTS |
Argomenti tmpdir JVM | Argomenti JVM | -Djava.io.tmpdir=${TMPDIR} |
GAE_MEMORY_MB |
Memoria disponibile | dimensioni | Impostato da Google App Engine o /proc/meminfo -400 M |
HEAP_SIZE_RATIO |
Memoria per l'heap | percentuale | 80 |
HEAP_SIZE_MB |
Heap disponibile | dimensioni | ${HEAP_SIZE_RATIO} % di ${GAE_MEMORY_MB} |
JAVA_HEAP_OPTS |
Argomenti heap JVM | Argomenti JVM | -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M |
JAVA_GC_OPTS |
Argomenti GC JVM | Argomenti JVM | -XX:+UseG1GC più configurazione |
JAVA_USER_OPTS |
Altri argomenti JVM | Argomenti JVM | |
JAVA_OPTS |
Argomenti JVM | Argomenti JVM | Vedi di seguito |
SHUTDOWN_LOGGING_THREAD_DUMP |
Chiudi il dump dei thread | boolean | false |
SHUTDOWN_LOGGING_HEAP_INFO |
Informazioni sull'heap di arresto | boolean | false |
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD |
Campionamento per arresto | percentuale | 100 |
Se non viene configurato esplicitamente, il valore predefinito per JAVA_OPTS
è
JAVA_OPTS:=-showversion \
${JAVA_TMP_OPTS} \
${DBG_AGENT} \
${JAVA_HEAP_OPTS} \
${JAVA_GC_OPTS} \
${JAVA_USER_OPTS}
La riga di comando eseguita è efficace (dove $@ sono gli argomenti passati nel punto di ingresso Docker):
java $JAVA_OPTS "$@"
Test locale
Puoi creare la tua app utilizzando:
mvn package
Ed eseguila utilizzando la riga di comando java
:
java -jar target/myjar.jar
In alternativa, segui le istruzioni per il framework dell'applicazione su come eseguire l'app in locale.
Quando esegui test nel tuo ambiente locale, potresti preferire l'utilizzo dei servizi cloud di Google emulati, anziché dei servizi cloud di Google remoti.
Sono disponibili emulatori per
Datastore,
Pub/Sub e
Bigtable.
Utilizza 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
Deployment dell'app
Dopo aver completato le configurazioni, puoi utilizzare Google Cloud CLI per eseguire il deployment di questa directory contenente il file app.yaml
e il JAR utilizzando:
gcloud app deploy app.yaml
Se utilizzi uno dei file di configurazione facoltativi (index.yaml
, cron.yaml
e dispatch.yaml
), assicurati di eseguirne 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 file pom.xml
specifica già l'ID progetto, non è necessario includere la proprietà -Dapp.deploy.projectId
nel comando che esegui.
Gradle
Utilizza Gradle per eseguire il deployment della tua app:
gradle appengineDeploy
Personalizzazione del runtime Java 8
Non è necessario un Dockerfile per eseguire il deployment dell'app nel runtime Java 8. Tuttavia, se la tua app richiede una configurazione aggiuntiva, puoi fornire esplicitamente un Dockerfile per personalizzare il runtime Java.
Se vuoi utilizzare l'immagine come base per un runtime personalizzato, puoi specificare runtime: custom
nel file app.yaml
e quindi scrivere il Dockerfile in questo modo:
FROM gcr.io/google-appengine/openjdk:8
COPY your-application.jar $APP_DESTINATION
Queste righe aggiungono il JAR nella posizione corretta per il container Docker.
Puoi aggiungere altre istruzioni al Dockerfile per personalizzare il runtime Java. Consulta Creazione di runtime personalizzati.