Skip to main content
Version: v2026.1.0

Core Configuration

This section describes the various FlowerDocs Core configurations to be defined in the application's core.properties file.

General

PropertyDescription
system.admin.usernameSystem account identifier
system.admin.passwordSystem account password, can be encrypted with a secret
token.keyToken shared between FlowerDocs Core, FlowerDocs GUI and ARender HMI
secretSecret used to encode password (optional)
core.contextApplication context

Logging

PropertyDescription
logging.file.nameLog file path and name
logging.level.rootLog level: WARN, ERROR, INFO, DEBUG

OpenSearch

PropertyDescription
opensearch.urisAddresses of the various OpenSearch nodes separated by a ,
opensearch.usernameUser name (optional)
opensearch.passwordUser password (optional)

Redis

PropertyDescription
redis.enabledEnables Redis, a prerequisite for high availability
spring.data.redis.hostHost name Redis
spring.data.redis.portRedis listening port

ARender

PropertyDescription
arender.rendition.nodesAddress of the ARender rendition or a Load Balancer

It is not recommended to modify ARender properties by setting parameters in the core.properties file. Properties that are not defined in the documentation are not qualified by FlowerDocs: the correct operation of the application is therefore not guaranteed with these modifications.

Connection pools and timeouts

The connection pools and timeouts of the main infrastructure components are configurable. Defaults are tuned for a typical load; adjust them per environment.

OpenSearch client

PropertyDescription
opensearch.pool.max.total / opensearch.pool.max.per.routeHTTP connection pool size (default 200)
opensearch.connect.timeout / opensearch.socket.timeoutConnect and read timeouts (default 5000 / 60000 ms)

REST OperationHandler client

PropertyDescription
rest.oh.pool.max.total / rest.oh.pool.max.per.routeClient pool size (default 200 / 100)
rest.oh.connect.timeout / rest.oh.read.timeoutCallback connect and read timeouts (default 5000 / 30000 ms)

ARender rendition client

The pool Core uses to reach the ARender rendition service.

PropertyDescription
arender.server.rendition.rest.max.connectionsPool size, beyond which requests wait for a free connection (default 200)
arender.server.rendition.rest.pending.acquire.timeout / arender.server.rendition.rest.pending.acquire.max.countHow long a request waits for a pooled connection, and how many may wait (default 120000 ms / -1, no limit)
arender.server.rendition.rest.max.idle.time / arender.server.rendition.rest.max.life.timeClose a connection after it has been idle, or after it has existed, for this long (default -1 for both, meaning never)
arender.server.rendition.rest.read.timeout / arender.server.rendition.rest.write.timeoutRead and write timeouts (default 120000 ms)
arender.server.rendition.rest.max.in.memory.sizeMaximum number of bytes buffered in memory (default 8000000)
Set max.idle.time below any idle timeout on the network path

If Core reaches the rendition service through a load balancer, a reverse proxy or a firewall, that component will close idle connections without telling either side. With max.idle.time left at -1 the pool never recycles, so it hands out connections the other end has already dropped. The symptom is a request that stalls for exactly the idle-timeout duration and then succeeds on retry, and under sustained load the pool fills with dead connections.

Set max.idle.time below the shortest idle timeout on the path. For a 60 second load balancer timeout, arender.server.rendition.rest.max.idle.time=30000 with arender.server.rendition.rest.max.life.time=300000 is a sound starting point.

Two points worth knowing:

  • The ARender HMI has its own pool with the same defaults, configured in ARender's own files. If the viewer and thumbnails traverse the same load balancer, set arender.server.rendition.rest.max.idle.time there too.
  • Do not confuse this namespace with rest.client.*, which configures the rendition broker's outgoing calls to its microservices and belongs on the broker, not on Core.

Security headers

The GUI sends a Content-Security-Policy and browser security headers. Override these only if you embed FlowerDocs, serve assets from a custom CDN, or run a companion application on a non-default port: content.security.policy, content.security.policy.directives, hsts.max.age, referrer.policy, permissions.policy, cross.origin.opener.policy, cross.origin.resource.policy.