Java 8/Jetty 9 執行階段

Eclipse Jetty 9 執行階段使用 OpenJDK 8 和支援 Java Servlet 3.1 規格的 Jetty 9。

必備條件

  • 下載最新版的 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 外掛程式

整理您的檔案

來源樹狀結構看起來應該像這樣:

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]

app.yaml

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

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

當您部署 WAR (*.war 檔案) 時,系統即會自動選取執行階段映像檔 gcr.io/google-appengine/jetty

如果您想將此映像檔當做自訂執行階段的基礎,則可在 app.yaml 檔案中指定 runtime: custom,然後編寫如下所示的 Dockerfile:

FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION

這些字行會將 WAR 新增至 Docker 容器的正確位置。

如需其他 app.yaml 設定的說明,請參閱使用 app.yaml 一文。

pom.xml 是用來設定 Maven,而 build.gradle 則是用來設定 Gradle。

選用檔案

下列為選用的設定檔:

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

web.xml 是選用檔案,只有當您並未使用 Servlet 3.x 註解時才需要用到。

您可以在 webapp/ 目錄中放置靜態網頁內容以及 JavaServer 頁面。 App Engine 彈性環境用做 Servlet 容器的 Jetty 9 會使用 Apache Jasper 做為預設 JSP 實作,並包含 JSTL 標記庫。

Dockerfile 是用來自訂 Java 執行階段的選用檔案。

啟用 gzip 壓縮

gzip 處理常式隨附於 Jetty,但依預設不會啟用。如要啟用此模組,請在 app.yaml 檔案中設定環境變數 JETTY_MODULES_ENABLE=gzip

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

採用快速啟動

Jetty 可以預先掃描應用程式的內容並產生設定檔,進而加快應用程式的啟動時間。如果您是使用擴充映像檔,則新增應用程式 WAR 之後,您可以在 Dockerfile 中執行 /scripts/jetty/quickstart.sh 以啟用快速啟動。

FROM launcher.gcr.io/google/jetty
ADD your-application.war $JETTY_BASE/webapps/root.war

# generate quickstart-web.xml
RUN /scripts/jetty/quickstart.sh

環境變數

您可以設定下列 Java 8/Jetty 9 執行階段專屬的選用環境變數。您也可以一併設定 OpenJDK 8 環境變數

如要設定環境變數,請在 app.yaml 檔案中設定 env_variables 金鑰。

環境變數 Maven 屬性 值/註解
JETTY_PROPERTIES 附加至 $JETTY_ARGSname=value 組合清單 (以逗號分隔)。
JETTY_MODULES_ENABLE 附加至 $JETTY_ARGS 以進行啟用的模組清單 (以逗號分隔)。
JETTY_MODULES_DISABLE $JETTY_BASE/start.d 移除以進行停用的模組清單 (以逗號分隔)。
JETTY_ARGS 傳送至 jetty start.jar 的引數。針對自訂 jetty 設定所使用的任何引數都應該在此處傳送。
JAVA_OPTS JVM 執行階段引數

已啟用的 Stackdriver Logging (測試版)

在 App Engine 彈性環境中執行時,您可以透過 JETTY_ARGS 環境變數來設定 Java Util Logging,以便將記錄傳送給 Google Stackdriver Logging。例如:

 env_variables:
   JETTY_ARGS: -Djava.util.logging.config.file=WEB-INF/logging.properties

您必須提供以下列方式設定 LoggingHandlerlogging.properties 檔案:

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

本機測試

在本機環境測試時,您可以利用模擬的 Google 雲端服務,不必使用遠端 Google 雲端服務。下列為可供使用的模擬器:

使用 gcloud 指令啟動這些模擬器,然後再執行應用程式:

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

Maven

在 maven pom.xml 檔案中加入下列幾行即可新增 Jetty 9 Maven 外掛程式

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.4.2.v20170220</version>
</plugin>

如要在本機執行應用程式,請使用 Maven 指令:

mvn jetty:run-exploded

Gradle

按照建立新的 Gradle 專案一文中的指示,將 Gretty Gradle 外掛程式新增至 build.gradle,然後使用以下指令:

gradle jettyRun

部署您的應用程式

如要初始化 Google Cloud SDK,請執行:

gcloud init

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

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/Jetty 9 執行階段

您不需要使用 Dockerfile,即可將應用程式部署至 Java 8/Jetty 9 執行階段。如果應用程式需要其他設定,您可以藉由明確提供 Dockerfile 來自訂 Java 執行階段。Dockerfile 必須包含基本映像檔 gcr.io/google-appengine/jetty。您可以在 Dockerfile 中加入其他指令以自訂 Java 執行階段。詳情請參閱建構自訂執行階段

Dockerfile 的開頭應如下所示:

FROM gcr.io/google-appengine/jetty
ADD your-application.war $APP_DESTINATION
# YOUR DOCKER COMMANDS

在此範例中,your-application.war 是您在 target/ 目錄 (maven) 或 build/staged-app/ (gradle) 中建構的 WAR 檔案名稱。

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

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

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