page:recipes:ai workflow runner:spring boot:worker state

Host ai workflow runner with Spring Boot: worker execution and job state

Summary

Deploy a ai workflow runner built with Spring Boot as a public web service plus a dedicated worker process on Ample. ample plan --write discovers both services and their shared database and writes ample.toml; ample up reconciles the topology: a managed PostgreSQL 16 database, a public web microVM and a private worker microVM (kind worker, no public URL), both reading DATABASE_URL. Verified on Spring Boot: a separately deployed worker service (kind worker, no public URL) sharing a declared managed PostgreSQL database with the web service, consuming a jobs table with row locks and marking jobs done once (worker=done attempts=1). Not separately tested: your job payloads, retry policy and scheduling; treat the ai workflow runner-specific behavior as your application code.

Representative Queries

Resource Requirements

Infrastructure Requirements

  1. Compute
    • Status: verified
    • Summary: Apps run in isolated x86_64 Firecracker microVMs that auto-pause when idle and wake on request; sizes are the priced VM sizes.
  2. Postgres
    • Status: verified
    • Summary: Managed PostgreSQL 16 runs in its own microVM and is auto-provisioned when an app needs a database and no DATABASE_URL is supplied.

Framework

Workload

Release Status

Support Status

Execution Status

Prerequisites

Tested Configuration

Workflow Steps

  1. Plan the topology
    Run the planner once. It discovers the web and worker services, infers kind = "worker" for the process without a port, declares the database each service needs, and writes ample.toml. Exit 2 means it left questions in the manifest; answer them with --answer or by editing the file.
    Command: ample plan --write .
  2. Share one database
    Keep a single [databases.main] with engine = "postgres", drop any per-service database the planner added, and set DATABASE_URL = { database = "main" } under both [services.web.env] and [services.worker.env].
    Command: ample plan --offline .
  3. Apply
    Reconcile the whole manifest in dependency order: the database first, then both services. It is idempotent and never destructive; exit 0 means everything applied, 2 needs input, 1 a failed resource (independent siblings still proceed and re-running resumes).
    Command: ample up .
  4. Verify
    Fetch the web service URL and its worker status route (/p/worker-queue/status in the example) and confirm the worker processed the enqueued job; on failure read the worker service's runtime logs.
    Command: ample logs --kind runtime

Examples

Success Checks

Limitations

Cost Estimate

Components

  1. Name: web server
    • Size: s-1vcpu-1gb
    • Quantity: 1.0
    • Monthly Amount: 5.0
  2. Name: worker server
    • Size: s-1vcpu-1gb
    • Quantity: 1.0
    • Monthly Amount: 5.0
  3. Name: managed PostgreSQL database
    • Size: s-1vcpu-1gb
    • Quantity: 1.0
    • Monthly Amount: 5.0

Evidence Summary

Last Verified At

Unknowns

Formats

Next Actions

  1. Browse the catalog index

    • Action ID: browse-catalog
    • Operation ID: catalog_index
    • Method: GET
    • Relative Path: /v1/catalog
    • Requires Authentication: false
    • Requires Approval: false
  2. Search published recipes by intent, stack and constraints

    • Action ID: search-recipes
    • Operation ID: search_recipes
    • Method: POST
    • Relative Path: /v1/catalog/search
    • Parameters:
      • Body:
        • Limit: 5
        • Query: Host ai workflow runner with Spring Boot: worker execution and job state
    • Requires Authentication: false
    • Requires Approval: false
  3. Prepare a side-effect-free deployment plan for an authorized project

    • Action ID: plan:page:recipes:ai-workflow-runner:spring-boot:worker-state
    • Operation ID: plan_deployment
    • Method: POST
    • Relative Path: /v1/catalog/plan
    • Parameters:
      • Body:
        • Inputs: {}
        • Project ID: ""
        • Recipe ID: page:recipes:ai-workflow-runner:spring-boot:worker-state
        • Recipe Revision: r1
    • Requires Authentication: true
    • Requires Approval: false
  4. Read the existing agent authentication setup

    • Action ID: auth-setup
    • Operation ID: existing_auth_setup
    • Method: GET
    • Relative Path: /mcp/setup
    • Requires Authentication: false
    • Requires Approval: false
  5. Browse AI workflow runner

    • Action ID: browse:workload:ai-workflow-runner
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/workload%3Aai-workflow-runner
    • Parameters:
      • Node ID: workload:ai-workflow-runner
    • Requires Authentication: false
    • Requires Approval: false
  6. Browse Spring Boot

    • Action ID: browse:stack:framework-spring-boot
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/stack%3Aframework-spring-boot
    • Parameters:
      • Node ID: stack:framework-spring-boot
    • Requires Authentication: false
    • Requires Approval: false
  7. Browse Dedicated worker process

    • Action ID: browse:pattern:dedicated-worker-process
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/pattern%3Adedicated-worker-process
    • Parameters:
      • Node ID: pattern:dedicated-worker-process
    • Requires Authentication: false
    • Requires Approval: false
  8. Browse Deploy AI app

    • Action ID: browse:intent:deploy-ai-app
    • Operation ID: browse_node
    • Method: GET
    • Relative Path: /v1/catalog/nodes/intent%3Adeploy-ai-app
    • Parameters:
      • Node ID: intent:deploy-ai-app
    • Requires Authentication: false
    • Requires Approval: false