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.
| Maven | Gradle | |
|---|---|---|
| JDK | <java.version>, <maven.compiler.source>, atau <maven.compiler.target> di pom.xml | sourceCompatibility = … atau targetCompatibility = … di build.gradle |
| Build | mvn clean dependency:list install -Dmaven.test.skip=true dengan Maven dari image | gradle build -x test dengan Gradle 8.14.3 |
| Start | java -Dserver.port=$PORT -jar target/*.jar | java -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 dibuild/libsdan tidak bisa dijalankan. Tambahkan kebuild.gradle:groovyjar { enabled = false }Gradle: tulis versi Java di tempat yang dibaca zbpack. zbpack hanya membaca
sourceCompatibilitydibuild.gradle. Proyek yang mengatur versinya dengan toolchain, atau memakaibuild.gradle.kts, dibangun dengan JDK 17 dan gagal untuk kode yang lebih baru. TambahkansourceCompatibility = '21'kebuild.gradle, atau gunakan Dockerfile sendiri (di bawah).Health check. Aplikasi Spring Boot butuh waktu untuk mulai. Gunakan health check HTTP ke
/actuator/health(denganspring-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:
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:
JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=75Dockerfile Anda sendiri
Dockerfile di direktori root dipakai sebagai pengganti zbpack: gunakan untuk Gradle wrapper, build Kotlin DSL, atau image runtime yang lebih kecil.
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
| Gejala | Penyebab |
|---|---|
no main manifest attribute, in build/libs/…-plain.jar | Gradle juga membangun plain jar. Nonaktifkan task jar. |
invalid target release: 21 atau release version 21 not supported | zbpack memilih JDK 17. Atur sourceCompatibility di build.gradle atau <java.version> di pom.xml, atau gunakan Dockerfile. |
| Deploy gagal health check sebelum aplikasi berjalan | Periode mulai terlalu pendek. Naikkan di health check. |
OutOfMemoryError, atau layanan restart saat beban tinggi | Heap terlalu kecil atau lebih besar dari batas memori. Atur batas memori dan JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=75. |
Failed to configure a DataSource | SPRING_DATASOURCE_URL tidak ada atau bukan URL jdbc:. |