Java 8 執行階段

Java 8 執行階段不包含任何提供網路服務的架構。唯一需求是您的應用程式應監聽及回應通訊埠 8080。本文的範例程式碼顯示您可以如何將自己的架構 (例如 Spring Boot) 新增至 Java 8 執行階段。

事前準備

  • 在您著手開發之前,請先下載最新版的 Google Cloud SDK,或將您的 Cloud SDK 更新至最新版本:

    gcloud components update
    
  • 如要使用 Maven 進行部署,您必須在 pom.xml 中新增 App Engine Maven 外掛程式

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

    其他部署選項包括使用 gcloud app deploy 指令或 App Engine Gradle 外掛程式

  • 請按照您應用程式架構的操作說明,設定可執行 JAR 的版本。這個可執行的 JAR 必須透過 java -jar app.jar 執行。如需範例,請參閱 Spring Boot 說明文件。

整理您的檔案

您的開發檔案階層看起來應該像這樣:

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

app.yaml

app.yaml 為必要檔案。定義如下所示的檔案:

runtime: java
env: flex

透過指定 runtime: java,系統會在您部署 JAR (*.jar) 檔案時,自動選取執行階段映像檔 gcr.io/google-appenine/openjdk:8

如要選取 JDK 版本,請使用 runtime_config.jdk 欄位。

runtime: java
env: flex
runtime_config:
  jdk: openjdk8

您可以在使用 app.yaml 中找到其他 app.yaml 設定。

選用檔案

下列為選用的設定檔:

請將這些檔案放置於 MyDir 的頂層。如果您要使用其中任何檔案,則必須使用 gcloud app deploy 指令進行個別部署。

預設進入點

OpenJDK 8 映像檔的進入點是 docker-entrypoint.bash,可處理傳遞的指令列引數,以尋找預設指令的可執行替代項目或引數 (java)。

如果映像檔的第一個引數無法執行,系統會以隱含方式新增 java 指令。例如:

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

如果映像檔的第一個引數可以執行 (例如 bash),則系統會執行該指令。

例如,您可以使用下列指令執行殼層:

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

環境變數

使用 app.yaml 檔案中的 env_variables 金鑰,設定環境變數:例如:

env_variables:
   MY_VAR_COLOR: 'blue'

下表列出您可以用來啟用、停用或設定功能的環境變數。

環境變數 說明 類型 預設
DBG_ENABLE Stackdriver Debugger 布林值 true
TMPDIR 暫存目錄 目錄名稱
JAVA_TMP_OPTS JVM tmpdir 引數 JVM 引數 -Djava.io.tmpdir=${TMPDIR}
GAE_MEMORY_MB 可用的記憶體 大小 由 Google App Engine 設定或為 /proc/meminfo-400M
HEAP_SIZE_RATIO 堆積的記憶體 百分比 80
HEAP_SIZE_MB 可用的堆積 大小 ${GAE_MEMORY_MB}${HEAP_SIZE_RATIO}%
JAVA_HEAP_OPTS JVM heap 引數 JVM 引數 -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M
JAVA_GC_OPTS JVM GC 引數 JVM 引數 -XX:+UseG1GC 以及設定
JAVA_USER_OPTS JVM 其他引數 JVM 引數
JAVA_OPTS JVM 引數 JVM 引數 詳情請見下方
SHUTDOWN_LOGGING_THREAD_DUMP 關閉執行緒傾印 布林值 false
SHUTDOWN_LOGGING_HEAP_INFO 關閉堆積資訊 布林值 false
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD 關閉取樣 百分比 100

如未明確設定,JAVA_OPTS 預設為 JAVA_OPTS:=-showversion \ ${JAVA_TMP_OPTS} \ ${DBG_AGENT} \ ${JAVA_HEAP_OPTS} \ ${JAVA_GC_OPTS} \ ${JAVA_USER_OPTS}

執行的指令列有效 (其中 $@ 是傳遞至 Docker 進入點的引數):

java $JAVA_OPTS "$@"

本機測試

您可以使用下列指令建構應用程式:

mvn package

也可以使用 java 指令列執行應用程式:

java -jar target/myjar.jar

或者,按照關於如何在本機執行應用程式的應用程式架構操作說明來執行操作。

在本機環境中測試時,您可能會想要使用模擬的 Google 雲端服務,而不使用遠端 Google 雲端服務。您可以使用 Cloud DatastoreCloud PubSubCloud Bigtable 模擬器。請使用 gcloud 指令啟動這些模擬器,然後再執行應用程式:

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

部署應用程式

完成設定後,您可以透過 Google Cloud SDK 使用下列指令來部署包含 app.yaml 檔案和 JAR 的目錄:

gcloud app deploy app.yaml

如果您使用任何選用的設定檔 (index.yamlcron.yamldispatch.yaml),請確保透過 gcloud 指令個別部署這些設定檔。例如:

gcloud app deploy cron.yaml

Maven

使用 Maven 部署應用程式:

mvn appengine:deploy

Gradle

使用 Gradle 部署應用程式:

gradle appengineDeploy

自訂 Java 8 執行階段

您不需要使用 Dockerfile,也能將應用程式部署至 Java 8 執行階段。不過,如果您的應用程式需要額外設定,您可明確提供 Dockerfile 以自訂 Java 執行階段。

如果您要使用映像檔做為自訂執行階段的基礎,則可在 app.yaml 檔案中指定 runtime: custom,然後按下方所示寫入 Dockerfile:

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

這些指令行會將 JAR 新增至 Docker 容器的正確位置。

您可以在 Dockerfile 中加入其他指令以自訂 Java 執行階段。請參閱建構自訂執行階段一文。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Java 適用的 App Engine 彈性環境文件