סביבת זמן הריצה של 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:
מידע על הגדרת 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