Runtime Java

Runtime Java adalah stack software yang bertanggung jawab untuk menginstal kode aplikasi dan dependensi Anda, lalu menjalankan aplikasi tersebut di lingkungan fleksibel.

  • Versi 11 dan yang lebih baru dibuat menggunakan buildpack, yang mengharuskan Anda memilih sistem operasi di file app.yaml. Misalnya, untuk menggunakan Java 21, Anda harus menentukan Ubuntu 22 sebagai sistem operasi.

  • Runtime Java 8 / Jetty 9 memberikan dukungan untuk Spesifikasi Java Servlet 3.1 pada OpenJDK 8 dan Eclipse Jetty 9. Gambar Jetty mewarisi dari gambar OpenJDK.

Untuk daftar lengkap versi Java yang didukung, dan versi Ubuntu yang sesuai, lihat Jadwal dukungan runtime.

Prasyarat

Untuk menggunakan runtime Java:

  • Anda harus menginstal gcloud CLI versi 420.0.0 atau yang lebih baru. Anda dapat memperbarui alat CLI dengan menjalankan perintah gcloud components update. Untuk melihat versi yang diinstal, Anda dapat menjalankan perintah gcloud version.

  • Untuk men-deploy menggunakan Maven, Anda perlu menambahkan Plugin Maven App Engine ke pom.xml:

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

    Opsi lain untuk men-deploy mencakup perintah gcloud app deploy atau plugin Gradle App Engine.

Mengatur file Anda

Hierarki sumber Anda akan terlihat seperti ini:

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]

Memilih versi Java

Versi runtime baru

Untuk runtime Java versi 11 dan yang lebih baru, Anda harus menyertakan setelan runtime_config dan operating_system dalam file app.yaml untuk menentukan sistem operasi.

Secara opsional, Anda dapat menentukan versi runtime dengan menyertakan setelan runtime_version dalam file app.yaml. Secara default, versi Java terbaru akan digunakan jika setelan runtime_version tidak ditentukan.

Contoh

  • Untuk menentukan Java 21 di Ubuntu 22:

    runtime: java
    env: flex
    
    runtime_config:
        operating_system: "ubuntu22"
        runtime_version: "21"
    
  • Untuk menentukan versi Java terbaru yang didukung di Ubuntu 22:

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

Versi runtime sebelumnya

Untuk Java 8, tentukan setelan runtime_config dan jdk dalam file app.yaml Anda.

Java 8 mendukung:

  • Eclipse Jetty 9 runtime dan menjalankan Jetty 9 menggunakan Servlet 3.1.
  • Kode server Anda sendiri yang memantau port 8080 sebagai bagian dari aplikasi Anda. Fitur ini memungkinkan Anda menggunakan framework microservice seperti SparkJava dan Spring-Boot.

Contoh

  • Menentukan Jetty versi 9 (default / opsional):

      runtime_config:
        jdk: openjdk8
        server: jetty9
    
  • Menentukan Java versi 8:

      runtime_config:
        jdk: openjdk8
    
  • Contoh app.yaml untuk Java 8:

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

Lihat pom.xml untuk mengonfigurasi Maven dan build.gradle untuk mengonfigurasi Gradle.

File opsional

File konfigurasi ini bersifat opsional:

Tempatkan file ini di tingkat teratas MyDir. Jika menggunakan file ini, Anda harus men-deploy-nya secara terpisah dengan perintah gcloud app deploy.

web.xml bersifat opsional dan hanya diperlukan jika Anda tidak menggunakan anotasi Servlet 3.x.

Anda dapat menempatkan konten web statis serta halaman JavaServer di direktori webapp/ Anda. Jetty 9, yang digunakan lingkungan fleksibel App Engine sebagai container Servlet-nya, menggunakan Apache Jasper sebagai implementasi JSP default dan mencakup taglibs JSTL.

File Dockerfile bersifat opsional dan digunakan untuk menyesuaikan runtime Java.

Mengaktifkan kompresi gzip

Pengendali gzip dipaketkan dengan Jetty, tetapi tidak diaktifkan secara default. Untuk mengaktifkan modul ini, tetapkan variabel lingkungan, JETTY_MODULES_ENABLE=gzip, dalam file app.yaml:

env_variables:
  JETTY_MODULES_ENABLE: 'gzip'

Menggunakan Panduan Memulai

Jetty dapat mempercepat waktu mulai aplikasi Anda dengan memindai kontennya terlebih dahulu dan membuat file konfigurasi. Jika menggunakan image yang diperluas, Anda dapat mengaktifkan panduan memulai dengan menjalankan /scripts/jetty/quickstart.sh di Dockerfile, setelah WAR aplikasi ditambahkan.

Variabel lingkungan

Anda dapat menetapkan variabel lingkungan opsional berikut yang spesifik untuk runtime Java 8/Jetty 9. Anda juga dapat menetapkan variabel lingkungan OpenJDK 8.

Untuk menetapkan variabel lingkungan, gunakan kunci env_variables dalam file app.yaml.

Env Var Properti Maven Nilai/Komentar
JETTY_PROPERTIES Daftar pasangan name=value yang dipisahkan koma ditambahkan ke $JETTY_ARGS
JETTY_MODULES_ENABLE Daftar modul yang dipisahkan koma untuk diaktifkan dengan menambahkan ke $JETTY_ARGS
JETTY_MODULES_DISABLE Daftar modul yang dipisahkan koma untuk dinonaktifkan dengan menghapusnya dari $JETTY_BASE/start.d
JETTY_ARGS Argumen yang diteruskan ke start.jar jetty. Argumen yang digunakan untuk konfigurasi jetty kustom harus diteruskan di sini.
JAVA_OPTS Argumen runtime JVM

Cloud Logging yang Ditingkatkan (Beta)

Saat berjalan di lingkungan fleksibel App Engine, Anda dapat mengonfigurasi Java Util Logging untuk mengirim log ke Cloud Logging dengan menetapkan variabel lingkungan JETTY_ARGS. Contoh:

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

Anda harus memberikan file logging.properties yang mengonfigurasi LoggingHandler sebagai berikut:

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

Pengujian lokal

Saat melakukan pengujian di lingkungan lokal, Anda dapat menggunakan layanan Google Cloud yang diemulasi, bukan layanan Google Cloud jarak jauh. Anda dapat menggunakan emulator berikut:

Gunakan perintah gcloud untuk memulainya sebelum Anda menjalankan aplikasi:

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

Maven

Tambahkan baris berikut di file pom.xml Maven untuk menambahkan Plugin Maven Jetty 9:

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

Untuk menjalankan aplikasi secara lokal, gunakan perintah Maven:

mvn jetty:run-exploded

Gradle

Ikuti petunjuk Membuat project Gradle baru untuk menambahkan plugin Gretty Gradle ke build.gradle Anda, dan gunakan perintah:

gradle jettyRun

Men-deploy aplikasi Anda

Untuk menginisialisasi Google Cloud CLI, jalankan:

gcloud init

Setelah menyelesaikan konfigurasi, Anda dapat menggunakan Google Cloud CLI untuk men-deploy direktori ini yang berisi file app.yaml dan WAR menggunakan:

gcloud app deploy app.yaml

Jika Anda menggunakan salah satu file konfigurasi opsional (index.yaml, cron.yaml, dan dispatch.yaml), deploy secara terpisah dengan perintah gcloud. Contoh:

gcloud app deploy cron.yaml

Maven

Gunakan Maven untuk men-deploy aplikasi Anda:

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

Ganti PROJECT_ID dengan ID project Google Cloud Anda. Jika file pom.xml sudah menentukan project ID, Anda tidak perlu menyertakan properti -Dapp.deploy.projectId dalam perintah yang dijalankan singkat ini.

Gradle

Gunakan Gradle untuk men-deploy aplikasi Anda:

gradle appengineDeploy

Menyesuaikan runtime Java 8 / Jetty 9

Anda tidak memerlukan Dockerfile untuk men-deploy aplikasi ke runtime Java 8/Jetty 9. Jika aplikasi memerlukan konfigurasi tambahan, Anda dapat secara eksplisit menyediakan Dockerfile untuk menyesuaikan runtime Java. Dockerfile harus menyertakan image dasar. Anda dapat menambahkan perintah tambahan ke Dockerfile untuk menyesuaikan runtime Java. Lihat Mem-build runtime kustom.

Dalam hal ini, your-application.war adalah nama file WAR bawaan dalam direktori target/ (maven), atau build/staged-app/ (gradle).