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 Java

Java 21 menggunakan buildpacks. buildpack membantu Anda mem-build dan mengonfigurasi container yang dapat di-deploy ke Google Cloud.

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

Untuk menggunakan versi Java yang didukung, Anda harus:

  • Instal 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 harus menambahkan plugin Maven App Engine ke pom.xml:

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

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

  • Sertakan 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 penampung 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

Dukungan untuk runtime Java lainnya

Jika perlu menggunakan versi Java yang tidak didukung, Anda dapat membuat runtime kustom dan memilih image dasar yang valid dengan versi Java yang Anda butuhkan.

Untuk image dasar yang disediakan Google atau image dasar Java Docker, lihat Mem-build runtime kustom.

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]

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

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