Runtime Java 8

Runtime Java 8 tidak menyertakan framework penyajian web apa pun. Satu-satunya persyaratan adalah aplikasi Anda harus memproses dan merespons pada port 8080. Kode contoh di sini menunjukkan cara menambahkan framework Anda sendiri, seperti Spring Boot, ke runtime Java 8.

Prasyarat

  • Sebelum mulai mengembangkan, download Google Cloud CLI versi terbaru atau update gcloud CLI ke versi terbaru:

    gcloud components update
    
  • 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 penggunaan perintah gcloud app deploy atau plugin App Engine Gradle.

  • Ikuti petunjuk untuk framework aplikasi Anda guna mengonfigurasi build JAR yang dapat dieksekusi. JAR yang dapat dieksekusi ini harus dijalankan melalui java -jar app.jar. Sebagai contoh, rujuk dokumentasi Spring Boot.

Mengatur file Anda

Hierarki file pengembangan Anda akan terlihat seperti ini:

MyDir/
  pom.xml
  [index.yaml]
  [cron.yaml]
  [dispatch.yaml]
  src/main/
    appengine/
      app.yaml
    docker/
      Dockerfile
    java/
      com.example.mycode/
        MyCode.java

app.yaml

File app.yaml wajib ada. Tentukan file yang terlihat seperti ini:

runtime: java
env: flex

Dengan menentukan runtime: java, image runtime gcr.io/google-appengine/openjdk:8 akan otomatis dipilih saat Anda men-deploy file JAR (*.jar).

Untuk memilih versi JDK, gunakan kolom runtime_config.jdk.

runtime: java
env: flex
runtime_config:
  jdk: openjdk8

Anda dapat menemukan setelan app.yaml lain di Menggunakan app.yaml.

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.

Titik entri default

Titik entri untuk gambar OpenJDK 8 adalah docker-entrypoint.bash, yang memproses argumen command line yang diteruskan untuk mencari alternatif yang dapat dieksekusi atau argumen terhadap perintah default (java).

Jika argumen pertama untuk gambar tidak dapat dieksekusi, perintah java akan ditambahkan secara implisit. Contoh:

$ docker run openjdk -jar /usr/share/someapplication.jar

Jika argumen pertama ke image dapat dieksekusi, seperti bash, argumen ini akan menjalankan perintah tersebut.

Misalnya, Anda dapat menjalankan shell dengan:

> docker run -it --rm openjdk bash
root@c7b35e88ff93:/#

Variabel lingkungan

Gunakan kunci env_variables dalam file app.yaml untuk menetapkan variabel lingkungan. Contoh:

env_variables:
   MY_VAR_COLOR: 'blue'

Tabel berikut mencantumkan variabel lingkungan yang dapat Anda gunakan untuk mengaktifkan, menonaktifkan, atau mengonfigurasi fitur.

Env Var Deskripsi Jenis Default
TMPDIR Direktori Sementara dirname
JAVA_TMP_OPTS JVM tmpdir args JVM args -Djava.io.tmpdir=${TMPDIR}
GAE_MEMORY_MB Memori yang tersedia ukuran Ditetapkan oleh Google App Engine atau /proc/meminfo-400M
HEAP_SIZE_RATIO Memori untuk heap persen 80
HEAP_SIZE_MB Heap yang tersedia ukuran ${HEAP_SIZE_RATIO}% dari ${GAE_MEMORY_MB}
JAVA_HEAP_OPTS JVM heap args JVM args -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M
JAVA_GC_OPTS JVM GC args JVM args -XX:+UseG1GC plus konfigurasi
JAVA_USER_OPTS JVM other args JVM args
JAVA_OPTS JVM args JVM args Lihat di bawah
SHUTDOWN_LOGGING_THREAD_DUMP Menghentikan thread dump boolean false
SHUTDOWN_LOGGING_HEAP_INFO Matikan info heap boolean false
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD Pengambilan sampel penonaktifan persen 100

Jika tidak ditetapkan secara eksplisit, JAVA_OPTS akan ditetapkan secara default ke JAVA_OPTS:=-showversion \ ${JAVA_TMP_OPTS} \ ${DBG_AGENT} \ ${JAVA_HEAP_OPTS} \ ${JAVA_GC_OPTS} \ ${JAVA_USER_OPTS}

Command line dijalankan secara efektif (dengan $@ adalah args yang diteruskan ke titik entri Docker):

java $JAVA_OPTS "$@"

Pengujian Lokal

Anda dapat mem-build aplikasi menggunakan:

mvn package

Dan jalankan menggunakan command line java:

java -jar target/myjar.jar

Atau, ikuti petunjuk untuk framework aplikasi Anda tentang cara menjalankan aplikasi secara lokal.

Saat melakukan pengujian di lingkungan lokal, Anda mungkin lebih memilih untuk menggunakan layanan cloud Google teremulasi, dan bukan layanan cloud Google jarak jauh. Terdapat emulator untuk Datastore, Pub/Sub, dan Bigtable. Gunakan perintah gcloud untuk memulainya sebelum Anda menjalankan aplikasi:

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

Men-deploy aplikasi Anda

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

gcloud app deploy app.yaml

Jika Anda menggunakan salah satu file konfigurasi opsional (index.yaml, cron.yaml, dan dispatch.yaml) pastikan untuk men-deploy-nya 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

Anda tidak memerlukan Dockerfile untuk men-deploy aplikasi ke runtime Java 8. Namun, jika aplikasi Anda memerlukan konfigurasi tambahan, Anda dapat secara eksplisit menyediakan Dockerfile untuk menyesuaikan runtime Java.

Jika ingin menggunakan image sebagai dasar untuk runtime kustom, Anda dapat menentukan runtime: custom dalam file app.yaml, lalu menulis Dockerfile seperti ini:

FROM gcr.io/google-appengine/openjdk:8
COPY your-application.jar $APP_DESTINATION

Baris ini menambahkan JAR di lokasi yang benar untuk container Docker.

Anda dapat menambahkan perintah tambahan ke Dockerfile untuk menyesuaikan runtime Java. Lihat Mem-build Runtime Kustom.