Langsung ke konten

Spring Boot ​

Apa yang dideteksi Zenavo ​

Repositori dengan pom.xml atau build.gradle(.kts) dibangun dengan zbpack sebagai Java. Repositori itu dianggap aplikasi Spring Boot bila pom.xml punya spring-boot-starter-parent, atau file Gradle menyebut org.springframework.boot.

MavenGradle
JDK<java.version>, <maven.compiler.source>, atau <maven.compiler.target> di pom.xmlsourceCompatibility = … atau targetCompatibility = … di build.gradle
Buildmvn clean dependency:list install -Dmaven.test.skip=true dengan Maven dari imagegradle build -x test dengan Gradle 8.14.3
Startjava -Dserver.port=$PORT -jar target/*.jarjava -Dserver.port=$PORT -jar build/libs/*.jar

JDK-nya adalah Eclipse Temurin, versi 17 bila tidak ditemukan versi apa pun. Tes dilewati, dan wrapper mvnw atau gradlew proyek tidak dipakai. pom.xml dengan <packaging>war</packaging> menjalankan target/*.war. Zenavo mengatur PORT ke port layanan, 8080 untuk build zbpack, dan perintah start meneruskannya ke Spring sebagai server.port.

Untuk menjalankan aplikasi dengan cara lain, atur ZBPACK_JAVA_ARGS di Settings → Build → zbpack options; perintah start menjadi java diikuti nilai itu, misalnya ZBPACK_JAVA_ARGS=-jar target/app.jar --spring.profiles.active=prod.

Sebelum deploy ​

  • Gradle: matikan plain jar. Plugin Gradle Spring Boot juga menulis *-plain.jar, yang berada paling depan di build/libs dan tidak bisa dijalankan. Tambahkan ke build.gradle:

    groovy
    jar {
        enabled = false
    }
  • Gradle: tulis versi Java di tempat yang dibaca zbpack. zbpack hanya membaca sourceCompatibility di build.gradle. Proyek yang mengatur versinya dengan toolchain, atau memakai build.gradle.kts, dibangun dengan JDK 17 dan gagal untuk kode yang lebih baru. Tambahkan sourceCompatibility = '21' ke build.gradle, atau gunakan Dockerfile sendiri (di bawah).

  • Health check. Aplikasi Spring Boot butuh waktu untuk mulai. Gunakan health check HTTP ke /actuator/health (dengan spring-boot-starter-actuator) dan periode mulai 60 detik atau lebih.

Hubungkan database ​

Spring membaca URL JDBC, bukan connection string postgresql://, jadi susun dari variabel host dan port database:

sh
SPRING_DATASOURCE_URL=jdbc:postgresql://${POSTGRESQL_HOST}:${POSTGRESQL_PORT}/zenavo
SPRING_DATASOURCE_USERNAME=postgres
SPRING_DATASOURCE_PASSWORD=${POSTGRESQL_DB_PASSWORD}

Untuk MySQL: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/zenavo dengan pengguna root dan ${MYSQL_DB_PASSWORD}. Database yang ditambahkan dari konsol bernama zenavo (Database). Jalankan migrasi Flyway atau Liquibase saat startup, yang memang dilakukan Spring Boot secara bawaan bila salah satunya ada di classpath.

Memori ​

JVM menentukan ukuran heap dari memori kontainer. Atur batas memori untuk layanan, dan biarkan heap memakai sebagian besarnya dengan sebuah variabel:

sh
JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=75

Dockerfile Anda sendiri ​

Dockerfile di direktori root dipakai sebagai pengganti zbpack: gunakan untuk Gradle wrapper, build Kotlin DSL, atau image runtime yang lebih kecil.

dockerfile
FROM eclipse-temurin:21-jdk AS build
WORKDIR /src
COPY . .
RUN ./gradlew bootJar --no-daemon

FROM eclipse-temurin:21-jre
COPY --from=build /src/build/libs/*.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

Untuk Maven, build dengan ./mvnw -DskipTests package dan salin target/*.jar. Port layanan berasal dari EXPOSE; Spring mendengarkan di 8080 secara bawaan.

Masalah umum ​

GejalaPenyebab
no main manifest attribute, in build/libs/…-plain.jarGradle juga membangun plain jar. Nonaktifkan task jar.
invalid target release: 21 atau release version 21 not supportedzbpack memilih JDK 17. Atur sourceCompatibility di build.gradle atau <java.version> di pom.xml, atau gunakan Dockerfile.
Deploy gagal health check sebelum aplikasi berjalanPeriode mulai terlalu pendek. Naikkan di health check.
OutOfMemoryError, atau layanan restart saat beban tinggiHeap terlalu kecil atau lebih besar dari batas memori. Atur batas memori dan JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=75.
Failed to configure a DataSourceSPRING_DATASOURCE_URL tidak ada atau bukan URL jdbc:.

Tidak berafiliasi dengan Zeabur.