Java 8 Runtime

O Java 8 Runtime não inclui nenhuma biblioteca de veiculação na Web. O único requisito é que o aplicativo deve escutar e responder na porta 8080. O código de exemplo aqui mostra como adicionar biblioteca própria, como Spring Boot, ao Java 8 Runtime.

Pré-requisitos

  • Antes de começar a desenvolver, faça o download da versão mais recente do SDK do Google Cloud ou atualize a versão dele:

    gcloud components update
    
  • Para implantar com o Maven, adicione o plug-in Maven para App Engine ao pom.xml:

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>2.2.0</version>
    </plugin>

    Outras opções de implantação incluem o comando gcloud app deploy ou o plug-in Gradle para App Engine.

  • Siga as instruções da biblioteca do aplicativo para configurar a versão de um JAR executável. Ele precisa ser executado por java -jar app.jar. Para ver exemplos, consulte a documentação de Spring Boot.

Organizar os arquivos

A hierarquia de arquivos de desenvolvimento deve ser assim:

MyDir/
  pom.xml
  [index.yaml]
  [cron.yaml]
  [dispatch.yaml]
  src/main/
    appengine/
      app.yaml
    docker/
      Dockerfile
    java/
      com.example.mycode/
        MyCode.java

app.yaml

É necessário um arquivo app.yaml. Defina um arquivo que tenha a seguinte aparência:

runtime: java
env: flex

Ao especificar runtime: java, a imagem do tempo de execução gcr.io/google-appenine/openjdk:8 é selecionada automaticamente quando você implanta um arquivo JAR (*.jar).

Para selecionar uma versão do JDK, use o campo runtime_config.jdk.

runtime: java
env: flex
runtime_config:
  jdk: openjdk8

É possível encontrar outras configurações do app.yaml em Como usar o app.yaml.

Arquivos opcionais

Estes arquivos de configuração são opcionais:

Coloque esses arquivos no nível superior de MyDir. Se você usar qualquer desses arquivos, precisará implantá-los separadamente com o comando gcloud app deploy.

Ponto de entrada padrão

O ponto de entrada da imagem do OpenJDK 8 é docker-entrypoint.bash, que processa os argumentos de linha de comando passados para procurar uma alternativa executável ou argumentos para o comando padrão (java).

Se o primeiro argumento para a imagem não for um executável, o comando java será adicionado implicitamente. Exemplo:

$ docker run openjdk -jar /usr/share/someapplication.jar

Se o primeiro argumento para a imagem for um executável, como bash, ele executará esse comando.

Por exemplo, execute um shell com:

> docker run -it --rm openjdk bash
root@c7b35e88ff93:/#

Variáveis de ambiente

Use a chave env_variables no arquivo app.yaml para definir variáveis de ambiente. Exemplo:

env_variables:
   MY_VAR_COLOR: 'blue'

A tabela a seguir lista as variáveis de ambiente que você usa para ativar, desativar ou configurar recursos.

Variável de ambiente Descrição Tipo Padrão
DBG_ENABLE Stackdriver Debugger booleano true
TMPDIR Diretório temporário dirname
JAVA_TMP_OPTS Argumentos tmpdir do JVM Argumentos do JVM -Djava.io.tmpdir=${TMPDIR}
GAE_MEMORY_MB Memória disponível tamanho Definido pelo Google App Engine ou /proc/meminfo-400M
HEAP_SIZE_RATIO Memória da pilha percentual 80
HEAP_SIZE_MB Pilha disponível tamanho ${HEAP_SIZE_RATIO}% de ${GAE_MEMORY_MB}
JAVA_HEAP_OPTS Argumentos de pilha do JVM Argumentos do JVM -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M
JAVA_GC_OPTS Argumentos GC do JVM Argumentos do JVM -XX:+UseG1GC mais configuração
JAVA_USER_OPTS Outros argumentos do JVM Argumentos do JVM
JAVA_OPTS Argumentos do JVM Argumentos do JVM Consulte abaixo
SHUTDOWN_LOGGING_THREAD_DUMP Despejo de thread de desligamento booleano false
SHUTDOWN_LOGGING_HEAP_INFO Informações de pilha de desligamento booleano false
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD Amostragem de desligamento percentual 100

Quando não é configurado explicitamente, JAVA_OPTS é padronizado como JAVA_OPTS:=-showversion \ ${JAVA_TMP_OPTS} \ ${DBG_AGENT} \ ${JAVA_HEAP_OPTS} \ ${JAVA_GC_OPTS} \ ${JAVA_USER_OPTS}

A linha de comando é executada efetivamente (em que $@ são os argumentos passados para o ponto de entrada do docker):

java $JAVA_OPTS "$@"

Teste local

Crie o aplicativo usando:

mvn package

E executá-lo usando a linha de comando java:

java -jar target/myjar.jar

Ou siga as instruções da biblioteca de aplicativos sobre como executar o aplicativo localmente.

Ao testar no ambiente local, prefira usar serviços de nuvem emulados do Google, em vez de serviços de nuvem remotos do Google. Há emuladores para Cloud Datastore, Cloud Pub/Sub e Cloud Bigtable. Use o comando gcloud para iniciá-los antes de executar o aplicativo:

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

Como implantar o app

Depois de completar as configurações, use o Google Cloud SDK para implantar esse diretório contendo o arquivo app.yaml e o JAR usando:

gcloud app deploy app.yaml

Se você estiver usando qualquer um dos arquivos de configuração opcionais (index.yaml, cron.yaml e dispatch.yaml), certifique-se de implantá-los separadamente com o comando gcloud. Exemplo:

gcloud app deploy cron.yaml

Maven

Use o Maven para implantar o aplicativo:

mvn appengine:deploy

Gradle

Use o Gradle para implantar o aplicativo:

gradle appengineDeploy

Como personalizar o Java 8 Runtime

Você não precisa de um Dockerfile para implantar o aplicativo no Java 8 Runtime. Mas, se o aplicativo precisar de configuração adicional, forneça explicitamente um Dockerfile para personalizar o tempo de execução do Java.

Se você quiser usar a imagem como base para um tempo de execução personalizado, poderá especificar runtime: custom no arquivo app.yaml e, em seguida, gravar o Dockerfile da seguinte maneira:

FROM gcr.io/google-appengine/openjdk:8
COPY your-application.jar $APP_DESTINATION

Essas linhas adicionam o JAR ao local correto para o contêiner do Docker.

Adicione outras diretivas ao Dockerfile para personalizar o tempo de execução do Java. Consulte Como criar tempos de execução personalizados.