Saltar al contenido

Spring Boot ​

Qué detecta Zenavo ​

Un repositorio con pom.xml o build.gradle(.kts) se compila con zbpack como Java. Es una aplicación Spring Boot cuando pom.xml tiene spring-boot-starter-parent, o el archivo de Gradle menciona org.springframework.boot.

MavenGradle
JDK<java.version>, <maven.compiler.source> o <maven.compiler.target> en pom.xmlsourceCompatibility = … o targetCompatibility = … en build.gradle
Compilarmvn clean dependency:list install -Dmaven.test.skip=true con el Maven de la imagengradle build -x test con Gradle 8.14.3
Arrancarjava -Dserver.port=$PORT -jar target/*.jarjava -Dserver.port=$PORT -jar build/libs/*.jar

El JDK es Eclipse Temurin, versión 17 si no se encuentra ninguna. Las pruebas se omiten, y no se usa el wrapper mvnw ni gradlew del proyecto. Un pom.xml con <packaging>war</packaging> ejecuta target/*.war. Zenavo pone en PORT el puerto del servicio, 8080 en las compilaciones de zbpack, y el comando de arranque se lo pasa a Spring como server.port.

Para arrancar la aplicación de otra forma, define ZBPACK_JAVA_ARGS en Settings → Build → zbpack options; el comando de arranque pasa a ser java seguido de ese valor, por ejemplo ZBPACK_JAVA_ARGS=-jar target/app.jar --spring.profiles.active=prod.

Antes de desplegar ​

  • Gradle: desactiva el jar plano. El plugin de Spring Boot para Gradle también escribe *-plain.jar, que va primero en build/libs y no se puede ejecutar. Añade a build.gradle:

    groovy
    jar {
        enabled = false
    }
  • Gradle: indica la versión de Java donde zbpack la lee. zbpack solo lee sourceCompatibility en build.gradle. Un proyecto que define su versión con un toolchain, o que usa build.gradle.kts, se compila con JDK 17 y falla con código más nuevo. Añade sourceCompatibility = '21' a build.gradle, o usa tu propio Dockerfile (abajo).

  • Comprobación de salud. Las aplicaciones Spring Boot tardan en arrancar. Usa una comprobación de salud HTTP en /actuator/health (con spring-boot-starter-actuator) y un periodo de arranque de 60 segundos o más.

Conecta una base de datos ​

Spring lee URL JDBC, no la cadena de conexión postgresql://, así que construye una con las variables de host y puerto de la base de datos:

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

Para MySQL: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/zenavo con el usuario root y ${MYSQL_DB_PASSWORD}. La base de datos se llama zenavo en las bases de datos añadidas desde la consola (Bases de datos). Ejecuta las migraciones de Flyway o Liquibase al arrancar, que es lo que hace Spring Boot por defecto cuando cualquiera de ellos está en el classpath.

Memoria ​

La JVM dimensiona el heap a partir de la memoria del contenedor. Define un límite de memoria para el servicio y deja que el heap use la mayor parte con una variable:

sh
JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=75

Tu propio Dockerfile ​

Un Dockerfile en el directorio raíz se usa en lugar de zbpack: úsalo para el wrapper de Gradle, compilaciones con Kotlin DSL o una imagen de ejecución más pequeña.

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"]

Con Maven, compila con ./mvnw -DskipTests package y copia target/*.jar. El puerto del servicio sale de EXPOSE; Spring escucha en el 8080 por defecto.

Problemas habituales ​

SíntomaCausa
no main manifest attribute, in build/libs/…-plain.jarGradle también compiló el jar plano. Desactiva la tarea jar.
invalid target release: 21 o release version 21 not supportedzbpack eligió JDK 17. Define sourceCompatibility en build.gradle o <java.version> en pom.xml, o usa un Dockerfile.
El despliegue falla la comprobación de salud antes de que arranque la aplicaciónEl periodo de arranque es demasiado corto. Auméntalo en la comprobación de salud.
OutOfMemoryError, o el servicio se reinicia con cargaEl heap es demasiado pequeño o mayor que el límite de memoria. Define un límite de memoria y JAVA_TOOL_OPTIONS=-XX:MaxRAMPercentage=75.
Failed to configure a DataSourceFalta SPRING_DATASOURCE_URL o no es una URL jdbc:.

Sin relación con Zeabur.