Flowable process definition cache settings

Flowable process definition cache settings decide how many parsed definitions each engine node keeps in memory and how nodes stay consistent after deployments. This page explains the options, the trade-offs and what to confirm before you change them.

On this page

Flowable process definition cache settings: when they matter for your deployment

If you run dozens or hundreds of process definitions, several tenants, or a cluster of engine nodes, the deployment cache becomes a setting you need to understand before go-live. The deployment cache holds parsed process definitions (the in-memory form of deployed BPMN, CMMN and DMN models) so the engine does not reload and reparse them from the database on every request. Its size and behavior therefore affect memory use on each node, how quickly a new or updated definition takes effect, and how often the engine goes back to the database. The Flowable configuration docs describe this cache as part of the engine configuration, and the same engine code runs whether you embed it as a JAR in a Java SE, servlet, Spring or Java EE application or call it over HTTP through the Flowable REST application.

Start by counting what you actually deploy. Count active definition versions per engine, not just distinct process keys, because each deployed version is a separate cache candidate. Then count tenants, since each tenant can carry its own definitions, and note how often you deploy. Frequent deployments and many versions raise memory pressure and make cache churn more visible. In a cluster, each node holds its own cache, so a deployment made through one node must reach the others before they serve the new version. Ask your engineers how the chosen Flowable version invalidates or refreshes cached definitions across nodes, and test a rolling deployment against live traffic before you rely on it. The async executor coordinates nodes through database lock records, but that mechanism does not by itself describe definition cache consistency, so confirm the behavior separately.

Before you tune anything, confirm the exact property names, defaults and cache-related classes in the configuration documentation for your Flowable version, because they change between major releases. Read the Flowable configuration docs for the version you run, then check the upgrade notes for your target release. A custom cache is worth the effort only when measurements show definition loading or memory use limiting throughput or stability, and when you can test eviction, cross-node consistency and restart behavior. Otherwise, sizing the default cache for your known definition count and a realistic deployment cadence is usually the lower-risk step.

Which Flowable process definition cache settings fit which deployment shape

This table compares the four option groups a team can set for the process definition cache: size limits, enlargement for many tenants, node-local refresh after deployments, and custom cache implementations. Read each row against your deployment shape, then confirm the property names and defaults in the configuration docs for your target version before you size anything.

Option groupWhen it fitsWhat it costsWhat to verify for your version
Default cache limitsA small, stable set of process definitions on a single engine nodeMemory held per node grows with deployed definitions and versions; reloads from the database happen when entries are evictedThe configuration docs for the cache size or count setting and its default in your Flowable release
Enlarged cache for many definitionsMany deployed versions or many tenants whose definitions are active at the same timeMore heap per node; a cache too small for the working set causes repeated database reads for definition lookupsWhether the cache size setting applies per engine or per process definition type, and how it interacts with tenant deployments
Node-local cache refresh after deploymentClusters where several engine nodes serve the same definitions and a new deployment must reach all of themNodes that have not refreshed can serve an older definition until their cache is updated, so routing and test steps must allow for that windowHow the target version refreshes or invalidates the local cache across nodes, and what the advanced docs say about shared state
Custom cache implementationA team needs cache behavior the built-in option cannot give, such as shared storage, metrics or a specific eviction policyYour team owns the implementation, its thread safety, its failure handling and its upgrade path across Flowable versionsThe configuration docs for supplying a custom cache, and whether the interface changed in the release you plan to run
Cache sizing review before go liveAny deployment that changes definition counts, tenant counts or versionsLoad tests and database read monitoring take engineering time, recurring at each major changeCount of definitions and versions per node, and database query counts for definition lookups under realistic load

How cache settings differ for single-tenant, many-definition and multi-tenant deployments

A single application with a small, stable set of process definitions is the simplest shape. The definitions are deployed by the application's release pipeline, the set rarely changes, and most of the cache holds the same handful of entries for the life of the process. Memory growth is small and mostly predictable from the number of deployed definitions and their versions. The main consistency question is whether every running instance of the application deploys the same definitions at the same time, because a node that has not yet loaded a new version can serve stale work until its cache is refreshed. A cache miss in this shape is usually a one-time cost after startup or a redeployment, when the engine parses the BPMN or CMMN XML again and rebuilds the process definition objects.

  • Startup and redeploy cost: Measure how long the first execution of each definition takes after a restart, since that is where most misses occur.
  • Version overlap: Check whether old versions remain deployed and still hold running instances, because they keep occupying cache entries.
  • Node agreement: Confirm that all nodes finish deploying before traffic reaches them.
  • Heap headroom: Record heap use after a full deployment cycle to see whether the default limits leave room for the application.
  • Miss rate under normal traffic: Confirm that the miss rate stays near zero once the application is warm.

Before you change any limit, check whether your release process causes repeated cold starts that the current settings do not absorb.

Setting up and verifying the deployment cache in a Flowable Spring Boot or embedded engine

This sequence takes a team from confirming its Flowable version to load testing the deployment cache with realistic tenant and definition counts, so the cache settings are chosen from measured behavior rather than defaults.

  1. Confirm the Flowable version and starter in use

    The platform or engineering lead records the exact Flowable engine version, whether the application uses a Spring Boot starter or an embedded engine built from the Java SE or servlet container setup, and the Spring Boot version it runs on. Flowable 8.0.0 requires Spring Framework 7 and Spring Boot 4 and does not support Spring Boot 3, so this check determines which documentation applies. Done when the version, starter artifacts and Spring Boot baseline are written into the change record and match the dependency tree.

  2. Locate the cache settings for that version

    The Java or platform engineer opens the configuration documentation for the same engine version and lists every cache-related property that governs process definition caching, including any that differ between the embedded engine and the Spring Boot starter. For Spring Boot, the starter-specific configuration is in the Spring Boot documentation, so the team reads that section before editing any property. Done when each candidate setting is listed with its default, its scope, and the file where it will be set, and the team confirms no setting is taken from a different major version's docs.

  3. Record baseline memory and definition counts

    In a test environment that mirrors production deployment shape, the engineer deploys a representative set of process definitions and tenants, then captures heap usage, the number of deployed definitions and the number of cached definition entries under steady load. The actuator endpoint at /actuator/flowable exposes monitoring data for running processes, and the team uses it alongside JVM metrics from its existing monitoring stack. Done when the baseline values are saved with the timestamp, the workload description and the JVM settings, so later measurements can be compared to them.

  4. Change one cache setting in the test environment

    The engineer changes a single cache property, such as the limit on cached definitions, and restarts the test node with no other changes. Changing one value at a time keeps any shift in memory or latency attributable to that setting. Done when the restarted node starts cleanly, the property value is confirmed in the running configuration or startup log, and the baseline capture is repeated under the same workload.

  5. Deploy a new definition version and confirm nodes pick it up

    The team deploys a new version of an existing process definition to a cluster with at least two nodes, then starts a new instance on each node and checks which definition version it uses. This confirms that the cache on every node reflects the new deployment and that a stale cached version is not used after the change. Done when each node reports the new definition version for new instances, and existing instances continue on their original version as the model requires.

  6. Load test with realistic tenant and definition counts

    The team runs a load test that matches expected tenant count, number of deployed definitions and the share of traffic that touches less frequently used definitions, because cache hit rates depend on that mix. The engineer records memory, definition lookups that miss the cache, and job latency against the baseline for each cache setting tested. Done when the results show whether the chosen limit keeps memory stable across the test window and whether the observed miss rate is acceptable for the expected workload.

  7. Decide whether a custom cache is needed

    The architect reviews the load test results and decides whether the built-in deployment cache settings meet the requirement or whether a custom cache implementation is justified. A custom cache adds code the team must maintain and test across Flowable upgrades, so it is only considered when the measured misses or memory use persist after tuning the supported settings. Done when the decision, the measurements behind it, and the settings to promote are recorded and reviewed with the operations team.

When a custom deployment cache is worth building

A custom deployment cache is worth building only when the built-in behavior fails a measured requirement, not because the default looks small on paper. The usual triggers are a very large number of process definitions that an engine node must hold, a tight memory budget per node that the default cache cannot respect, or eviction rules that depend on business context, such as keeping definitions for active tenants resident while retiring others. Before any design work, record the definition count per node, the resident memory each node uses at steady state, and how often definitions are reloaded from the database. If those numbers show no pressure, tuning the configured limits is cheaper and safer.

Owning a custom cache is an ongoing commitment. Flowable's documentation describes extending the engine through its configuration and service interfaces, and you should confirm which interfaces a given version exposes for cache replacement before you design anything, because the supported extension points change between major releases. Treat every upgrade as a potential rewrite of the cache layer, and budget for that work in the same plan that covers the Flowable upgrade notes. The custom code also has to be understood by whoever answers production incidents, which is a staffing question as much as a technical one.

Tests must come before and after the change. Before you replace anything, capture a baseline: cold-start time, definition reload counts, memory per node and latency of the first request after a deployment. After the change, run the same measurements, plus tests that deploy a new process definition version on one node and confirm every other node uses it within the expected window, that undeploy and version rollback propagate the same way, and that a node restart rebuilds its cache correctly. Include failure cases such as a database outage during deployment and a node joining mid-rollout. If propagation cannot be proven under these tests, the custom cache should not reach production.

Security and operational risks of changing the deployment cache

Changing how Flowable caches process definitions touches what every node serves, how deployments reach running engines, and what sits in memory. The cards below cover the risks that tend to surface after a cache change, each with a check you can run before and after the change. Confirm the exact cache behavior for your engine version with the Flowable configuration docs before you rely on it.

Stale definitions on one node

After a deployment, a node that does not refresh its cache keeps serving the previous process definition while others run the new one. Two nodes may then start the same process with different models, and running instances may hit different versions depending on which node picks up the request. Check that every node in your cluster reports the same deployed definition version after a deployment, and test a new instance start against each node before you release traffic. Confirm with the Flowable configuration docs how cache invalidation works across nodes in your version.

Memory pressure after limit increases

Raising the cache size limit lets the engine hold more process definitions in heap memory. On a node with a fixed heap, a larger cache can push the JVM into garbage collection pressure or an out-of-memory restart, especially when many tenants or versions are deployed. Before raising a limit, measure heap use under your real definition count, set an alert on heap and restart counts, and confirm the new limit leaves headroom for peak load. Record the limit and heap settings in the same change request so they are reviewed together.

Pipelines that bypass the refresh path

A deployment script that writes definitions straight to the database, or restarts only some nodes, can leave caches out of step with the repository. The engine then serves definitions that the pipeline and audit records do not match. Route every definition change through the engine's deployment API, and add a post-deploy check that compares the deployed definition keys and versions with the approved release manifest. Ask your team which tools can write to the deployment tables and restrict that access.

Deployment API access changes cache contents

Anyone who can call the deployment or definition APIs can add, suspend or replace what the cache holds. A custom cache that sits in front of those APIs widens this exposure if its inputs are not checked. Limit deployment and definition endpoints to a named service role, log each deployment with the caller identity, and review who holds that role on a schedule. Confirm the authorization model with the Flowable security documentation for your version, since the engine leaves many authorization checks to your application.

Definition details in memory dumps

Cached process definitions include model structure, task names, expressions and sometimes embedded configuration. A heap dump taken during an incident can expose that content to anyone with access to the dump file, which matters where models reveal business rules or integration endpoints. Restrict who can request heap dumps, store dumps in an encrypted location with access logging, and include dump handling in your incident runbook. Ask your security team whether definitions count as sensitive data under your classification policy.

Cache changes without metrics

If cache hit rate, size and eviction activity are not watched, a limit change can degrade performance for days before anyone links it to the cause. Missing metrics also hide stale-cache or memory problems until users report them. Expose the Flowable actuator endpoint in your monitoring stack, add dashboards for heap, garbage collection and definition-related errors, and set alerts with named owners. Review the Flowable Spring Boot docs for the monitoring endpoint your deployment uses.

What to confirm about your Flowable version and environment before tuning

Cache behavior depends on the Flowable release, the Spring Boot baseline, the database and how many nodes share it. Confirm these items first, because a setting that works on one version or topology can behave differently on another.

Flowable line and Spring Boot baseline

Flowable 8.x moved to Spring Framework 7 and Spring Boot 4 and does not support Spring Boot 3, while Flowable 7.x runs on Spring Boot 3 with Java 17 and Jakarta EE. Confirm which line you run, because the cache property keys and their defaults are documented per version. Check the release notes for your line before copying any setting from a blog post or an older project. Ask your team to record the exact version in the tuning ticket so results can be reproduced.

Database type and definition loading

Flowable supports H2, MySQL, Oracle, PostgreSQL, DB2 and Microsoft SQL Server, and the database shapes how often definitions must be read back from storage. Confirm your database product and version, and whether a managed service sits in front of it. Ask the vendor or the configuration docs how definition lookups are handled for your database, and test cache misses against it rather than assuming behavior carries over from another database.

Node count and shared database

The number of Flowable nodes and how they share one database determine whether each node holds its own copy of cached definitions. Confirm how many application instances run the engine, whether they share a schema, and whether deployments happen through one node or all of them. Test a definition deployment on a multi-node setup and verify that every node resolves the new version, since stale entries in one node are the failure to rule out.

Exact cache property keys and defaults

Cache-related property names and default values differ between configuration styles, including plain engine configuration and Spring Boot properties. Record the exact keys your version reads from its configuration docs, and confirm the default for each before you change anything. Do not state limit values from memory. Write down the effective values at startup from your own logs or configuration dump, then compare them with what the docs for your release list.

Custom cache code and upgrade impact

If your team wrote a custom deployment cache or overrides engine classes, that code is tied to internal types that can change between major releases. Inventory every custom class, bean override and configuration hook that touches the cache. Ask whether any of them must be rebuilt for your target version, and run the custom code against a staging copy of the target release before the production upgrade.

Test evidence and rollback plan

Tuning claims need a baseline measured on your own workload, including the number of process definitions, tenants, deployments per day and the memory your JVMs use. Confirm that you can capture definition count and heap use before and after each change, and that you can revert the setting without a database change. Ask your team to agree on the pass criteria before testing starts.

What buyers ask about cache tuning, cost and effort

What drives the cost of Flowable deployment cache work?

The cost is mostly the team's time, not the configuration change itself. The main components are scoping the process definition inventory, setting up a test environment that matches your node topology, running load tests that show memory and lookup behavior, reviewing results, and writing up the settings you chose. If a custom cache is needed, custom code, its tests and its documentation add further effort. Costs go up with the number of definitions and tenants, the number of cluster nodes, and how many environments must be validated. Under a fixed-scope agreement, ask the quote to list each of these as a separate deliverable with its own acceptance check.

Can our own team tune the Flowable deployment cache?

Often yes, for the standard settings, provided the team can run realistic load tests and read heap and cache metrics. Changing configuration keys is a small step; proving the change is safe across nodes is the harder part. Teams with a strong Java and Flowable operations background usually handle sizing and verification in house. A partner adds value when a custom cache, a tenant-heavy layout or a shared cluster makes the trade-offs harder to test. Ask the partner to state which parts you would keep in house and which they would deliver, so ownership is clear before work starts.

How long does cache tuning take, and what changes the answer?

We cannot give a reliable duration without seeing your environment, so treat any single number with caution. The schedule depends mainly on access to a production-like test environment, the size and variety of your process definitions, the number of tenants, and how quickly test data can be created. Delays usually come from waiting for environments, approvals to run load tests, or missing definition inventories rather than from the tuning itself. Ask for a timeline that lists these dependencies and the dates on which you must supply each one.

What do we need to provide before cache work starts?

Prepare the inputs that determine the sizing and the test design. Confirm the Flowable version and the Spring or Java baseline in use, along with the database type. Provide an inventory of deployed process definitions, CMMN and DMN models, and the number of tenants. Describe the node topology, including how many engine nodes share the database and how they are deployed. Finally, provide a test environment with representative data and access for load generation and monitoring. The written quote should name each input, its owner and the date it is needed.

Does a custom deployment cache need maintenance through upgrades?

Yes, if you replace or extend the default cache. A custom implementation depends on engine internals that can change between major versions, so each upgrade needs a compatibility check, regression tests and a review of the cache code. The default cache avoids this burden but may need different limits after a version change. Ask whether the quote includes upgrade verification for the cache and whether support is handled under a separate retainer. Upgrade notes for each Flowable release should be reviewed before the cache code is reused.

How do cache changes interact with the async executor and history settings?

Cache changes affect the engine's memory profile, so they interact with the async executor and history settings through heap use and database load. A larger cache can reduce repeated definition lookups, but more threads in the async executor and heavier history writes compete for the same memory. Tune these together in the same test campaign, and change one setting at a time so results are attributable. Ask the quote to include a combined test plan covering the async executor, history level and cache limits, not three separate studies.

What should a written quote for cache work include?

A useful quote lists the scope in concrete items: the inventory review, the environments used, the load test scenarios, the number of test cycles, any custom code and its tests, the documentation delivered, and the handover session. It should state what is excluded, such as production changes, upgrades or ongoing monitoring. Ask for acceptance criteria for each deliverable and for the assumptions about environment access and data. Because DeployOpen works from written scope, the quote should be traceable to these items rather than to a general estimate.

Is cache tuning a one-time task or does it recur?

The initial sizing and verification are one-time work, but the settings need review when definition counts, tenant numbers, node counts or Flowable versions change. Growth in deployed definitions is the most common trigger. Plan for periodic checks in your operations routine and decide who owns them. If you want ongoing review, ask for it as a separate retainer with defined review points, rather than assuming it is covered by the initial engagement.

How DeployOpen scopes and delivers Flowable cache tuning

DeployOpen plans Flowable process definition cache settings as a written, fixed-scope piece of work inside your own infrastructure. We start from how many definitions and tenants your engines load, then agree what gets measured, changed, tested and handed over before any tuning begins.

How we scope

  • Inventory deployed process and case definitions, tenants and nodes that share one database.
  • Record current cache behavior, memory use and definition reload patterns under representative load.
  • Agree in writing whether standard cache settings suffice or a custom cache is in scope.

How we build

  • Apply and test cache limit changes in a non-production environment that mirrors your cluster layout.
  • Verify behavior across cluster nodes, including how definitions reach each node after a new deployment.
  • Build and test any custom cache implementation against the Flowable configuration points, with rollback steps.

How we hand over

  • Document each setting changed, its reason, the measurements taken and the expected memory footprint.
  • Provide runbooks for deploying new process definitions and for clearing or resizing the cache safely.
  • Walk your platform and engineering teams through monitoring signals and the thresholds that should trigger review.

How we support

  • Offer ongoing support, upgrades and re-tuning as a retainer when definition counts or tenant numbers grow.
  • Review cache behavior again when you upgrade Flowable, since configuration details can change between major versions.
  • Confirm the supported configuration keys and defaults for your exact Flowable version with the release documentation before each change.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.