flowable/flowable-engine · error · FlowableException
No flowable tables in DB. Set property "databaseSchemaUpdate
Error message
No flowable tables in DB. Set property "databaseSchemaUpdate" "true" or value="create-drop" (use create-drop for testing only!) for automatic schema creation
What it means
Thrown by Flowable's schema version check when the engine connects to a database in which none of the Flowable tables exist. The schema check ('create' or 'true' mode expected tables, queried the metadata, and the lookup failed with a missing-tables exception). Flowable deliberately refuses to run against an empty/uninitialized schema rather than failing later with cryptic SQL errors.
Source
Thrown at modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/db/EngineSqlScriptBasedDbSchemaManager.java:66
try {
String dbVersion = getDbVersion();
String currentVersion = getEngineVersion();
if (!currentVersion.equals(dbVersion)) {
throw new FlowableWrongDbException(currentVersion, dbVersion);
}
String errorMessage = null;
if (!isEngineTablePresent()) {
errorMessage = addMissingComponent(errorMessage, context);
}
if (errorMessage != null) {
throw new FlowableException("Flowable database problem: " + errorMessage);
}
} catch (Exception e) {
if (isMissingTablesException(e)) {
throw new FlowableException(
"No flowable tables in DB. Set property \"databaseSchemaUpdate\" \"true\" or value=\"create-drop\" (use create-drop for testing only!) for automatic schema creation",
e);
} else {
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
throw new FlowableException("couldn't get " + context + " db schema version", e);
}
}
}
logger.debug("flowable {} db schema check successful", context);
}
@Override
public void schemaCreate() {
if (lockConfiguration.isUseLockForDatabaseSchemaUpdate()) {View on GitHub (pinned to d6d39ce1c6)
Solutions
- Set databaseSchemaUpdate="true" (auto-create/upgrade on boot) or "create-drop" (testing only) in your engine configuration or flowable.cfg.xml.
- Create the schema manually by executing the SQL scripts for your database from the Flowable distribution (org/flowable/db/create/).
- Verify the JDBC URL points to the database/schema where Flowable tables actually live.
- Check the DB user's permissions/default schema so it can see the Flowable tables.
Example fix
// before
ProcessEngineConfiguration cfg = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("flowable.cfg.xml"); // databaseSchemaUpdate=false
// after
cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); Defensive patterns
Strategy: validation
Validate before calling
try (Connection c = ds.getConnection(); ResultSet rs = c.getMetaData().getTables(null, null, "ACT_GE_PROPERTY", new String[]{"TABLE"})) {
if (!rs.next()) throw new IllegalStateException("Flowable tables missing; set databaseSchemaUpdate=true or run create scripts");
} Try / catch
catch (FlowableException e) { if (e.getMessage().startsWith("No flowable tables")) { initSchema(); } else { throw e; } } Prevention
- Set databaseSchemaUpdate=true in dev/test environments.
- Run Flyway/Liquibase-managed Flowable create scripts in production.
- Verify JDBC URL and default schema before engine startup.
- Smoke-test DB connectivity and table presence in deployment health checks.
When it happens
Trigger: Calling engine configuration init (e.g. ProcessEngineConfiguration.buildProcessEngine()) with databaseSchemaUpdate set to "false" (or unset) while the target database/schema has no ACT_* / FLW_* tables; pointing the JDBC URL at the wrong or empty schema/catalog; the DB user lacks rights to see the tables in another schema.
Common situations: Fresh environment where SQL scripts were never run; switching datasource to a new database; H2/in-memory DB recreated per test with schema update disabled; wrong default schema for Oracle/Postgres users; tables created in one schema but connection resolves to another.
Understand the failure class
Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.
Related errors
- Schema version property is not set
- Could not set database schema on connection
- Flowable database problem: ${errorMessage}
- couldn't get ${context} db schema version
- version mismatch: library version is '${engineVersion}', db
AI-assisted analysis of flowable/flowable-engine@d6d39ce1c6 (2026-09-11).
Data as JSON: /api/errors/3763e4dea43a4e19.
Report an issue: GitHub.