זמן הריצה של Java

סביבת זמן הריצה של Java היא מחסנית התוכנה שאחראית להתקנת קוד האפליקציה והתלות שלה, ולאחר מכן להפעלת האפליקציה בסביבה הגמישה.

גרסאות Java

‫Java 25 משתמש ב-buildpacks. בעזרת buildpacks אפשר ליצור ולהגדיר קונטיינרים שאפשר לפרוס ב- Google Cloud.

הרשימה המלאה של גרסאות Java הנתמכות וגרסאות Ubuntu התואמות שלהן זמינה בלוח הזמנים לתמיכה בזמן ריצה.

כדי להשתמש בגרסת Java נתמכת, צריך:

  • מתקינים את גרסה 420.0.0 ואילך של ה-CLI של gcloud. אפשר לעדכן את כלי ה-CLI על ידי הרצת הפקודה gcloud components update. כדי לראות את הגרסה המותקנת, אפשר להריץ את הפקודה gcloud version.

  • כדי לפרוס באמצעות Maven, צריך להוסיף את App Engine Maven plugin לקובץ pom.xml:

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

    אפשרויות פריסה אחרות כוללות את הפקודה gcloud app deploy או את App Engine Gradle plugin.

  • כדי לציין מערכת הפעלה, צריך לכלול את ההגדרות runtime_config ו-operating_system בקובץ app.yaml.

  • אפשר גם לציין גרסה של זמן ריצה על ידי הוספת ההגדרה runtime_version לקובץ app.yaml. כברירת מחדל, נעשה שימוש בגרסת Java העדכנית ביותר אם לא מציינים את ההגדרה runtime_version.

    דוגמאות

    • כדי לציין Java 25 ב-Ubuntu 24:

      runtime: java
      env: flex
      
      runtime_config:
          operating_system: "ubuntu24"
          runtime_version: "25"
      
    • כדי לציין את הגרסה העדכנית ביותר של Java שנתמכת ב-Ubuntu 24:

        runtime: java
        env: flex
      
        runtime_config:
            operating_system: "ubuntu24"
      

גרסאות קודמות של זמן הריצה

ב-Java 8, מציינים את ההגדרות runtime_config ו-jdk בקובץ app.yaml.

‫Java 8 תומכת ב:

  • ‫Eclipse Jetty 9 בזמן ריצה ומריץ את Jetty 9 באמצעות Servlet 3.1.

  • קוד השרת שלכם שמקשיב ביציאה 8080 כחלק מהאפליקציה. התכונה הזו מאפשרת לכם להשתמש במסגרות מיקרו-שירות כמו SparkJava ו-Spring-Boot.

דוגמאות

  • ציון גרסה 9 של Jetty (ברירת מחדל / אופציונלי):

      runtime_config:
        jdk: openjdk8
        server: jetty9
    
  • ציון גרסה 8 של Java:

      runtime_config:
        jdk: openjdk8
    
  • דוגמה ל-app.yaml ב-Java 8:

    runtime: java
    env: flex
    
    handlers:
    - url: /.*
      script: this field is required, but ignored

מידע על הגדרת Maven מופיע במאמר pom.xml ומידע על הגדרת Gradle מופיע במאמר build.gradle.

קבצים אופציונליים

קובצי התצורה האלה הם אופציונליים:

ממקמים את הקבצים האלה ברמה העליונה של MyDir. אם אתם משתמשים באחד מהקבצים האלה, אתם צריכים לפרוס אותו בנפרד באמצעות הפקודה gcloud app deploy.

web.xml הוא אופציונלי ונדרש רק אם לא משתמשים בהערות של Servlet 3.x.

אפשר למקם תוכן אינטרנט סטטי וגם דפי JavaServer בספרייה webapp/. ‫Jetty 9, שסביבת App Engine הגמישה משתמשת בו כקונטיינר Servlet, משתמש ב- Apache Jasper כיישום JSP שמוגדר כברירת מחדל וכולל taglibs של JSTL.

קובץ ה-Dockerfile הוא אופציונלי ומשמש להתאמה אישית של זמן הריצה של Java.

הפעלת דחיסת gzip

ה-handler‏ gzip מצורף ל-Jetty אבל לא מופעל כברירת מחדל. כדי להפעיל את המודול הזה, מגדירים את משתנה הסביבה JETTY_MODULES_ENABLE=gzip בקובץ app.yaml:

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

שימוש במדריך למתחילים

‫Jetty יכולה לקצר את זמן ההפעלה של האפליקציה על ידי סריקה מראש של התוכן שלה ויצירה של קובצי הגדרה. אם אתם משתמשים בתמונה מורחבת, אתם יכולים להפעיל את מדריך למתחילים על ידי הרצה של /scripts/jetty/quickstart.sh ב-קובץ Docker, אחרי שמוסיפים את אפליקציית ה-WAR.

משתני סביבה

אפשר להגדיר את משתני הסביבה האופציונליים הבאים שספציפיים לסביבת זמן הריצה Java 8/Jetty 9. אפשר גם להגדיר משתני סביבה של OpenJDK 8.

כדי להגדיר משתני סביבה, משתמשים במפתח env_variables בקובץ app.yaml.

משתנה סביבה גימיק לתא צילום לאירועים ערך/תגובה
JETTY_PROPERTIES רשימה של זוגות name=value שמופרדים בפסיקים, שמצורפת ל-$JETTY_ARGS
JETTY_MODULES_ENABLE רשימת מודולים להפעלה, מופרדת בפסיקים, שמוסיפים בסוף $JETTY_ARGS
JETTY_MODULES_DISABLE רשימה של מודולים שמופרדים בפסיקים שצריך להשבית על ידי הסרה מ-$JETTY_BASE/start.d
JETTY_ARGS ארגומנטים שמועברים אל start.jar של Jetty. כאן צריך להעביר את כל הארגומנטים שמשמשים להגדרת Jetty בהתאמה אישית.
JAVA_OPTS ארגומנטים של זמן ריצה ב-JVM

Cloud Logging משופר (בטא)

כשמריצים בסביבה הגמישה של App Engine, אפשר להגדיר את Java Util Logging לשליחת יומנים ל-Cloud Logging על ידי הגדרת משתנה הסביבה JETTY_ARGS. לדוגמה:

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

צריך לספק קובץ logging.properties שמגדיר LoggingHandler באופן הבא:

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

תמיכה בסביבות זמן ריצה אחרות של Java

אם אתם צריכים להשתמש בגרסת Java שלא נתמכת, אתם יכולים ליצור סביבת ריצה בהתאמה אישית ולבחור תמונת בסיס תקינה עם גרסת Java שאתם צריכים.

לגבי תמונות בסיס שסופקו על ידי Google או תמונות בסיס של Docker Java, אפשר לעיין במאמר בנושא יצירת סביבות ריצה בהתאמה אישית.

ארגון הקבצים

עץ המקור אמור להיראות כך:

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]

בדיקה מקומית

כשבודקים בסביבה המקומית, אפשר להשתמש בשירותים מדומי Google Cloudבמקום בשירותים מרוחקים Google Cloud . אפשר להשתמש באמולטורים הבאים:

משתמשים בפקודה gcloud כדי להפעיל אותם לפני שמריצים את האפליקציה:

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

Maven

מוסיפים את השורות האלה לקובץ pom.xml של Maven כדי להוסיף את הפלאגין 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 CLI, מריצים את הפקודה:

gcloud init

אחרי שמסיימים את ההגדרות, אפשר להשתמש ב-Google Cloud CLI כדי לפרוס את הספרייה הזו שמכילה את הקבצים app.yaml ו-WAR באמצעות הפקודה:

gcloud app deploy app.yaml

אם אתם משתמשים באחד מקובצי התצורה האופציונליים (index.yaml,‏ cron.yaml ו-dispatch.yaml), צריך לפרוס אותם בנפרד באמצעות הפקודה gcloud. לדוגמה:

gcloud app deploy cron.yaml

Maven

משתמשים ב-Maven כדי לפרוס את האפליקציה:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud . אם קובץ pom.xml שלכם כבר מציין את מזהה הפרויקט, אין צורך לכלול את המאפיין -Dapp.deploy.projectId בפקודה שמריצים.

Gradle

משתמשים ב-Gradle כדי לפרוס את האפליקציה:

gradle appengineDeploy