Skip to main content

Configuration Reference

This page documents every significant property in the Viglet Dumont application.yaml file. Any property can be overridden via environment variables, JVM system properties (-Dkey=value), or a separate application-production.yaml file.

Override pattern

To override a property at runtime, use the environment variable convention: replace . and - with _ and uppercase everything. For example, dumont.indexing.provider becomes DUMONT_INDEXING_PROVIDER=solr.


Full Default Configuration​

spring:
datasource:
url: jdbc:h2:file:./store/db/dumontDB;DATABASE_TO_UPPER=false;CASE_INSENSITIVE_IDENTIFIERS=true
username: sa
password: ""
driver-class-name: org.h2.Driver
h2:
console:
enabled: false
path: /h2
settings:
web-allow-others: true
jpa:
properties:
hibernate:
"[globally_quoted_identifiers]": true
"[enable_lazy_load_no_trans]": true
hibernate:
ddl-auto: update
show-sql: false
artemis:
mode: embedded
broker-url: localhost:61616
embedded:
enabled: true
persistent: true
data-directory: store/queue
queues: connector-indexing.queue
jms:
template:
default-destination: connector-indexing.queue

server:
port: ${PORT:30130}

dumont:
indexing:
provider: turing
job:
batch-size: 50
solr:
url: http://localhost:8983/solr
collection: dumont
elasticsearch:
url: http://localhost:9200
index: dumont
username: ~
password: ~

turing:
url: http://localhost:2700
apiKey: ""

aem.querybuilder: false
aem.querybuilder.parallelism: 10

logging:
file:
name: store/logs/dum-connector.log
level:
com:
viglet: INFO

Property Reference​

Server​

PropertyDefaultDescription
server.port30130HTTP port for the Dumont application

Admin Account​

PropertyDefaultDescription
dumont.admin.password(unset)Password for the local admin account, applied at startup while no password is stored. Set it (env DUMONT_ADMIN_PASSWORD, at least 6 characters) and a container or CI start comes up with a working login and no first-access setup screen. Once a password is stored, for example set in the console, the property is ignored and a log line says so.

LLM Enrichment​

PropertyDefaultDescription
dumont.enrichment.llm.enabledfalseLets connectors classify with an LLM through Viglet Turing (/api/v2/summary, using the configured turing.url and turing.apiKey). It also lets them extract lists from a record's text, such as the skills a job description names; only items that appear in the text are published. When off, connectors that support an LLM fallback classify with their own rules and dictionaries only.

Run Alerts​

A run can finish and still carry a warning: a source reports something an operator should act on, or a field's coverage dropped sharply since the last run. The console marks such a run with a Warning badge on the Indexing Stats page.

PropertyDefaultDescription
dumont.alerts.webhook-url(unset)URL that receives a JSON POST when a source's run starts carrying a warning (event, source, provider, operationType, endTime, documentCount, partial, warnings). Sent once when a source goes from healthy to warned, not on every warned run. The Turing API key is never sent. Unset, nothing is sent.

Run Metrics (Prometheus)​

Each source's last run is published for Prometheus at /actuator/prometheus. The endpoint is served on a separate management port only, never on server.port, and needs no login, so keep that port on your internal network. No other actuator endpoint is exposed.

PropertyDefaultDescription
management.server.port30131Port that serves /actuator/prometheus.

Every metric carries the source and provider labels:

MetricMeaning
dumont_run_last_status1 if the source's last run completed, 0 if it stopped short (a partial run)
dumont_run_last_finished_secondsWhen the last run ended, in Unix seconds
dumont_run_last_duration_secondsHow long the last run took
dumont_run_last_documentsDocuments the last run indexed
dumont_runs_totalRuns that ended, by outcome (complete, warned, partial)

The values are restored from the stored run history at startup, so a restart does not hide a source that has stopped running. Example alert rules:

- alert: DumontRunFailed
expr: dumont_run_last_status == 0
- alert: DumontRunStalled
expr: time() - dumont_run_last_finished_seconds > 2 * 3600

Database​

PropertyDefaultDescription
spring.datasource.urljdbc:h2:file:./store/db/dumontDB;CASE_INSENSITIVE_IDENTIFIERS=TRUEJDBC URL for the indexing state database. If you override it with another H2 URL, keep CASE_INSENSITIVE_IDENTIFIERS=TRUE: without it, indexing runs fail when they finish.
spring.datasource.usernamesaDatabase username
spring.datasource.password""Database password
spring.datasource.driver-class-nameorg.h2.DriverJDBC driver class
spring.h2.console.enabledfalseEnable H2 web console: do not enable in production

Message Queue (Apache Artemis)​

PropertyDefaultDescription
spring.artemis.modeembeddedembedded (default) or native (external broker)
spring.artemis.broker-urllocalhost:61616Broker URL when using native mode
spring.artemis.embedded.enabledtrueEnable the embedded broker
spring.artemis.embedded.persistenttruePersist queue messages to disk (survives restarts)
spring.artemis.embedded.data-directorystore/queueDirectory for persisted queue data
spring.artemis.embedded.queuesconnector-indexing.queueQueue name created on startup

Indexing Configuration​

PropertyDefaultDescription
dumont.indexing.providerturingOutput target: turing, solr, or elasticsearch
dumont.indexing.job.batch-size50Number of Job Items per batch before queue delivery
dumont.indexing.provisiontrueSend each source's declared field schema to the backend before its first document, so fields are created as declared rather than inferred from whichever value arrives first. A rejected schema is logged and indexing continues with the site's current schema. Turing only: other backends have no declarative schema endpoint

Extraction Resilience​

An incomplete indexing run must not de-index what it never reached. Skipping that sweep is unconditional; these tune when a run is judged incomplete, and are read by the AEM connector, whose extraction is one HTTP fetch per page. See Core Concepts → Data Quality.

PropertyDefaultDescription
dumont.reactive.indexingfalseExtract on a bounded pool instead of sequentially
dumont.reactive.parallelism10Threads used for parallel extraction
dumont.reactive.extractTimeoutMs0Per-extract wall-clock bound in milliseconds; the overrun is cancelled and counted as one failed extraction. 0 disables it: no extraction is ever cancelled for time
dumont.reactive.failureRatioThreshold0.5Finish standalone (skip the de-index sweep) when this fraction of a run's extractions fail. 0 disables the guard

Content Audit​

The audit runs on a cron, re-enumerates every source, and files a record for anything the connector never queued. With dumont.audit.index.enabled it also compares against the search index itself and reports three differences: missing (in the source, never landed), stale (landed, but a later write failed), and orphaned (in the index, gone from the source). Missing and stale ids are requeued through the normal pipeline. Orphans are never deleted by the audit: a discovery pass that under-reports ids would otherwise take live content out of the index. Instead each pass writes the ids it found into a dated orphan report you review and apply yourself, through the orphan endpoints.

PropertyDefaultDescription
dumont.audit.cron0 0 3 * * *Cron for the scheduled content audit. - disables it
dumont.audit.cron.zoneUTCTimezone the cron is evaluated in
dumont.audit.index.enabledtrueAlso compare against the search index. Requires a backend that can enumerate what it holds. Turing can; Solr and Elasticsearch report nothing and the comparison is skipped
dumont.audit.index.orphanTtlPT24HHow long an orphan report stays applicable (ISO-8601 duration). Past it, applying is refused and a fresh audit must re-establish the report. PT0S or below switches expiry off

Turing Connection​

PropertyDefaultDescription
turing.urlhttp://localhost:2700Base URL of the Turing instance
turing.apiKey""API Token for authenticating with Turing

Solr Direct Connection​

PropertyDefaultDescription
dumont.indexing.solr.urlhttp://localhost:8983/solrApache Solr base URL
dumont.indexing.solr.collectiondumontSolr collection name

Elasticsearch Direct Connection​

PropertyDefaultDescription
dumont.indexing.elasticsearch.urlhttp://localhost:9200Elasticsearch base URL
dumont.indexing.elasticsearch.indexdumontElasticsearch index name
dumont.indexing.elasticsearch.username(none)Optional authentication username
dumont.indexing.elasticsearch.password(none)Optional authentication password

AEM QueryBuilder​

PropertyDefaultDescription
dumont.aem.querybuilderfalseEnable QueryBuilder-based content discovery instead of tree traversal during full indexing
dumont.aem.querybuilder.parallelism10Number of parallel threads for processing discovered paths

AEM Adobe I/O Events​

See AEM Connector → Adobe I/O Events.

PropertyDefaultDescription
dumont.aem.webhook.adobe-io.client-id–API Key (Client ID) of the OAuth Server-to-Server credential. When set, an incoming webhook payload whose recipient_client_id does not match is rejected with 401; unset leaves the endpoint open and logs a warning at startup
dumont.aem.journal.enabledfalsePull the same events from the Adobe I/O journal, recovering any the webhook dropped. Does not affect the webhook
dumont.aem.journal.poll-ms60000Delay between the end of one journal poll and the start of the next
dumont.aem.journal.batch-size100Events requested per journal page
dumont.aem.journal.max-pages-per-poll20Journal pages followed in one poll, so a large backlog drains across polls rather than in one burst
dumont.aem.journal.client-id–OAuth Server-to-Server API Key (Client ID) used for the journal
dumont.aem.journal.client-secret–OAuth Server-to-Server Client Secret used for the journal
dumont.aem.journal.ims-urlhttps://ims-na1.adobelogin.com/ims/token/v3Adobe IMS token endpoint
dumont.aem.journal.scopesopenid,AdobeID,adobeio_api,event_receiver_apiScopes requested for the token
dumont.aem.journal.sources.<source>–Journal URL of the event registration, per Dumont source name

AEM Fetch Strategy​

Configured per source in the console, not by property: see AEM Connector → Fetch Strategy.

Dependency Tracking​

PropertyDefaultDescription
dumont.dependencies.enabledfalsePersist /content/* references extracted from each indexed page and cascade re-index any dependent document on standalone updates. Currently populated only by the AEM connector, see AEM Connector → Dependency Tracking

Logging​

PropertyDefaultDescription
logging.file.namestore/logs/dum-connector.logLog file path
logging.level.com.vigletINFOLog level for Dumont application code

Indexing Log​

Separate from the application log above. Every document Dumont processes leaves a row per status it passes through (prepared, sent to the queue, delivered to the search engine), each naming the document, the source that produced it and the run it belonged to. Queried through the Logging API.

It is off by default: with no engine configured, the endpoint answers with an empty page and nothing is written. Pick MongoDB when you intend to query the log, and Redis when you mostly want to tail it: the Redis engine filters and sorts in memory after reading the whole list, so it degrades as the log grows.

Turning it on is one setting. dumont.logging.engine selects both the side that reads the log and the Logback profile that writes it: logging.config is derived from it, so mongodb selects logback-spring-mongo.xml and redis selects logback-spring-redis.xml:

dumont:
logging:
engine: mongodb
mongodb:
enabled: true
uri: mongodb://mongo:27017

Every profile writes to the console and the log file as well as its store, so choosing an engine does not cost you either. In particular there is no separate console-only profile to select in a container: the Docker image writes to stdout out of the box and the engine still applies.

Overriding the Logback profile

Set logging.config yourself only to point at a Logback file of your own; it takes precedence over the derived value and its contents are your business.

Setting it to one of the shipped profiles that writes a different store (including logback-spring-console.xml, which writes none) is refused at startup, with both settings quoted. That combination has no useful meaning: one store would be read and another, or none, written. Before 2026.3.7 it was accepted and produced a log the API reported as healthy and permanently empty. If an existing configuration has it, delete the logging.config line.

Upgrading from before 2026.3.7 in Docker

The images used to pin -Dlogging.config=classpath:logback-spring-console.xml, which switched the indexing log off no matter what else you set, so the log could not be enabled in a container at all. That pin is gone. If you added logging.config to your own compose file or entrypoint to work around it, remove it: the engine now selects the profile, and keeping the override will be refused at startup.

PropertyDefaultDescription
dumont.logging.enginenonenone, mongodb or redis
dumont.logging.databasedumontLogMongoDB database name
dumont.logging.collection.indexingindexingMongoDB collection holding the indexing rows
dumont.mongodb.enabledfalseMust also be true for the mongodb engine to activate
dumont.mongodb.urimongodb://localhost:27017MongoDB connection string
dumont.redis.enabledfalseMust also be true for the redis engine to activate
dumont.redis.uriredis://localhost:6379/0Redis connection string
dumont.redis.key.indexingdumontLog:indexingRedis list key holding the indexing rows
dumont.redis.maxEntries.indexing50000Trim the indexing list to this length on write

The same logging.config also persists the server log (the connector's own WARN and ERROR lines) to that store, in a second collection or list. It is written by the same machinery and fails the same way, but it is not exposed through the Logging API; read it in the store, or in store/logs/dum-connector.log.

PropertyDefaultDescription
dumont.logging.collection.serverserverMongoDB collection holding the server-log rows
dumont.redis.key.serverdumontLog:serverRedis list key holding the server-log rows
dumont.redis.maxEntries.server10000Trim the server list to this length on write

Each store is connected once and the connection is held for the lifetime of the connector (a MongoDB client, or a Redis pool) rather than dialled again per request. Tune either through its connection string; the usual options apply.

When the store refuses a write, the row is lost: the connector will not stall an indexing run waiting for its own log. It says so instead, at WARN in the application log (store/logs/dum-connector.log), naming both which log is losing rows and which store refused them:

Indexing log: a row could not be written to MongoDB. Rows are being lost while this lasts,
so the history will read short rather than empty.

Server log: a row could not be written to Redis. Rows are being lost while this lasts,
so the history will read short rather than empty.

An outage reports once rather than once per row, with a running count while it lasts and a final tally when writes resume, so the number of rows missing is a number you can read rather than infer. Grep for Indexing log: and Server log: after an outage before concluding that a short history means a quiet connector.

These warnings always reach the file and the console, never the store being complained about, so a MongoDB outage does not swallow the notice that MongoDB is down.

One default is Dumont's rather than the driver's. Where dumont.mongodb.uri does not set serverSelectionTimeoutMS, the indexing log applies 5000 ms in place of the driver's 30 s, so that a MongoDB which is down makes logging/status answer in five seconds rather than holding the request open for half a minute. Set the option explicitly in the URI to choose your own:

dumont.mongodb.uri: mongodb://mongo:27017/?serverSelectionTimeoutMS=2000

Common Production Overrides​

A minimal production override:

spring:
datasource:
url: jdbc:postgresql://db-host:5432/dumont_db
username: dumont
password: strong_password
driver-class-name: org.postgresql.Driver
h2:
console:
enabled: false

dumont:
indexing:
provider: turing

turing:
url: https://search.yourcompany.com
apiKey: your-turing-api-token

server:
port: 30130