Early access is open. Migration assistance is included with every plan.

Spring Boot hosting

Run Spring Boot with reserved memory for the JVM heap and dedicated CPU for consistent latency. Managed PostgreSQL and Redis are on the private network, and Actuator health checks control when traffic switches.

Build and run

9live detects Spring Boot automatically. You can override any default in 9live.toml, or add a Dockerfile and we'll use that instead.
Detected by
spring-boot in pom.xml or build.gradle
Build
./mvnw -q -DskipTests package
Start
java -jar target/app.jar
Dockerfile (optional)
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY . .
RUN ./mvnw -q -DskipTests package

FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENV JAVA_OPTS="-XX:MaxRAMPercentage=75"
CMD ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]

Recommendations

Settings that work well for Spring Boot on dedicated hardware.
  • Use -XX:MaxRAMPercentage instead of a fixed -Xmx so the heap follows the process memory allocation.
  • Point the health check at /actuator/health so traffic switches only after the context has started.
  • Run Flyway or Liquibase migrations at startup or in the release command.
  • Keep the HikariCP pool at 20 connections or fewer on Launch.
PlanPricevCPUMemoryNVMeDatabasesBackups
Launch$149/mo816 GB160 GB1Daily, kept 7 days
Grow$249/mo1232 GB320 GB2Daily, kept 14 days
Scale$349/mo1648 GB500 GB3, plus a read replicaHourly and daily, kept 30 days
CustomOn requestAs requiredUp to a full serverAs requiredAs requiredAs required

Questions

Do we need a Dockerfile to deploy Spring Boot?

No. 9live detects Spring Boot and builds it with a maintained buildpack. If your repository has a Dockerfile, we use it instead.

How are environment variables managed?

Set them per environment in the dashboard or with the CLI. They are encrypted at rest and injected at runtime. Connection strings for managed databases are added automatically.

What happens when a deploy fails?

If the build fails, or the new release fails its health check, the current release keeps serving traffic. You get a notification with the build or health-check logs.

Talk to an engineer about your setup

Tell us what you run today and where it runs. We reply within one business day with a recommended plan and an estimate for the migration.