Skip to content

Configuration properties

Spring Boot

This page lists every occurrent.* property the starters read. Your IDE can also code-complete them, and the core ones are defined in OccurrentProperties. A property marked blocking only is read by the blocking starter and ignored by the reactive starter.

PropertyDefaultWhat it does
occurrent.event-store.enabledtrueWhether the starter creates the EventStore bean. false also turns off the ApplicationService and DomainEventQueries beans.
occurrent.event-store.capabilities[STREAM]Which capabilities the event store has, STREAM, DCB or both. Adding DCB turns on the Dynamic Consistency Boundary beans. The set can’t be empty.
occurrent.event-store.mongodb.collectioneventsThe MongoDB collection events are stored in.
occurrent.event-store.mongodb.time-representationDATEHow time is stored in the CloudEvents, DATE or RFC_3339_STRING.
occurrent.event-store.stream.positiononWhether events written to a stream carry a global position. Unset means on, unless the store finds an existing collection without positions and turns it off. true keeps it on even then, and false turns it off for a store without DCB. A store with DCB always writes it.

Application service and CloudEvent conversion

Section titled “Application service and CloudEvent conversion”
PropertyDefaultWhat it does
occurrent.application-service.enabledtrueWhether the starter creates the ApplicationService beans. A missing key counts as true.
occurrent.application-service.enable-default-retry-strategytrueWhether the application service retries when a write condition is not fulfilled. It backs off exponentially from 100 ms up to 2 s, and rethrows the original exception after 5 retries.
occurrent.cloud-event-converter.cloud-event-sourcenoneThe CloudEvent source the converter writes, a URN such as urn:mycompany:mygame:game. Think of it as the stream type or category.
occurrent.cloud-event-converter.time-precisionMILLIS with DATEA ChronoUnit the converter truncates the event time to. When it’s unset and the time representation is DATE, which can’t store more than milliseconds, the converter truncates to MILLIS. Otherwise it leaves the time alone. See CloudEvent conversion.
PropertyDefaultWhat it does
occurrent.subscription.modeAUTOHow much of the subscription machinery the starter creates. AUTO creates subscriptions and starts them, MANUAL creates them and lets you start them yourself, and DISABLED creates none.
occurrent.subscription.mongodb.collectionsubscriptionsThe MongoDB collection checkpoints are stored in.
occurrent.subscription.mongodb.restart-on-change-stream-history-losttrueWhether a subscription restarts from the current time when the MongoDB oplog no longer has the history it needs to resume. It is not completely safe, see Restarting when the oplog is lost.
occurrent.subscription.start-when-no-start-position-can-be-recordedfalseWhether a durable subscription with no checkpoint starts anyway when the subscription model can’t tell it where the event store is right now, for example on a shared MongoDB Atlas cluster. Without it, the subscription is refused when you create it. See Starting when no start position can be recorded.
occurrent.subscription.competing-consumer.fence-checkpointstrueBlocking only. Whether a checkpoint write carries the competing-consumer lease version, so that a node that has lost its lease can’t move the checkpoint backward. It needs a CheckpointStorage that evaluates write conditions. See Checkpoint fencing.
occurrent.subscription.catchup-then-live.dedup-cache-size10000How many recently delivered event ids a @Projection(source = PUSH) remembers, to remove the duplicates where the catch-up and the live feed overlap.
occurrent.subscription.catchup-then-live.max-buffered-events100000How many events from the push feed may wait to be delivered before the projection fails. It is a ceiling, not a throttle.

These configure the store that records applied appends for @Projection(recordAppliedAppends = true). That page has the details.

PropertyDefaultWhat it does
occurrent.projection.applied-append.collectionappliedAppendsThe MongoDB collection recorded appends are stored in.
occurrent.projection.applied-append.retention7dHow long a recorded append is kept before a MongoDB TTL index deletes it.
occurrent.projection.applied-append.max-attempts10How many times the store calls MongoDB for one read or write before it fails, at most 1000.
occurrent.projection.applied-append.wait-backoff.initial25msHow long waitUntilApplied waits before it checks again the first time.
occurrent.projection.applied-append.wait-backoff.max250msThe longest wait between two checks.
occurrent.projection.applied-append.wait-backoff.multiplier2.0What the wait is multiplied by after each check that found the append not yet applied.
occurrent.projection.applied-append.replay-poll.initial200msHow often the starter checks a projection that just registered, or that still has a clear or a catch-up pending.
occurrent.projection.applied-append.replay-poll.max5sThe longest interval between two checks.
occurrent.projection.applied-append.replay-poll.multiplier2.0What the interval is multiplied by after each check that found nothing to do.

All of these are blocking only.

PropertyDefaultWhat it does
occurrent.saga.timer-poll-interval15sHow often a saga’s timer poller looks for timeouts that are due. See Running across multiple instances.
occurrent.saga.competing-consumer.enabledtrueWhether only one instance of the application polls for due timers, using the shared competing-consumer lease. See Several instances of a @Saga.
occurrent.saga.quarantine-afternoneHow long one saga instance may keep failing before it can be quarantined. Unset means quarantine is off. Zero or a negative duration stops the application from starting when it has a @Saga. See Observing @Saga instances.

occurrent-broker-kafka-spring-boot-starter reads these. See Brokers with Spring Boot.

PropertyDefaultWhat it does
occurrent.broker.kafka.bootstrap-serversnoneKafka’s bootstrap.servers, as a comma-separated string or a list. The sink and source factories are only created when it is set.
occurrent.broker.kafka.topicnoneThe topic the auto-configured KafkaSharedTopicDestinationResolver publishes to and subscribes to. You don’t need it when you declare your own DestinationResolver<KafkaDestination>.
occurrent.broker.kafka.producer.additional-properties.<name>noneAny other Kafka producer setting, TLS and SASL included. The serializers are always overwritten, acks defaults to all, and any acks other than all or -1 is refused.
occurrent.broker.kafka.consumer.additional-properties.<name>noneAny other Kafka consumer setting. enable.auto.commit defaults to false and any other value is refused. A group.id set here is ignored.
occurrent.broker.kafka.sink.acknowledgement-timeout5sHow long the sink waits for Kafka to acknowledge a write.
occurrent.broker.kafka.sink.retry.initial100msThe first delay when the sink retries a write.
occurrent.broker.kafka.sink.retry.max2sThe longest delay between two retries.
occurrent.broker.kafka.sink.retry.multiplier2.0What the delay is multiplied by after each retry.
occurrent.broker.kafka.source.poll-timeout1sHow long one poll of a source waits for records.
occurrent.broker.kafka.source.close-timeout30sHow long closing a source may take.
occurrent.broker.kafka.source.on-delivery-failureREDELIVERThe DeliveryFailurePolicy of a source when a handler fails, REDELIVER or PARK.
occurrent.broker.kafka.source.parking-destination.topicnoneThe topic PARK publishes a failed record to. It’s only needed with PARK.
occurrent.broker.kafka.source.commit-retry.initial100msThe first delay when a source retries an offset commit.
occurrent.broker.kafka.source.commit-retry.max2sThe longest delay between two retries.
occurrent.broker.kafka.source.commit-retry.multiplier2.0What the delay is multiplied by after each retry.

occurrent-broker-rabbitmq-spring-boot-starter reads these. See Brokers with Spring Boot.

PropertyDefaultWhat it does
occurrent.broker.rabbitmq.exchangenoneThe exchange the auto-configured RabbitMqTopicExchangeDestinationResolver publishes to and binds against. You don’t need it when you declare your own DestinationResolver<RabbitMqDestination>.
occurrent.broker.rabbitmq.sink.acknowledgement-timeout5sHow long the sink waits for RabbitMQ to confirm a publish.
occurrent.broker.rabbitmq.sink.retry.initial100msThe first delay when the sink retries a publish.
occurrent.broker.rabbitmq.sink.retry.max2sThe longest delay between two retries.
occurrent.broker.rabbitmq.sink.retry.multiplier2.0What the delay is multiplied by after each retry.
occurrent.broker.rabbitmq.source.poll-interval1sHow often a source polls its queue.
occurrent.broker.rabbitmq.source.prefetch-count1How many unacknowledged messages RabbitMQ sends a source at a time.
occurrent.broker.rabbitmq.source.close-timeout30sHow long closing a source may take.
occurrent.broker.rabbitmq.source.declare-topologytrueWhether a source declares its queue and bindings. Set it to false when your platform team owns them.
occurrent.broker.rabbitmq.source.on-delivery-failureREDELIVERThe DeliveryFailurePolicy of a source when a handler fails, REDELIVER or PARK.
occurrent.broker.rabbitmq.source.parking-destination.exchangenoneThe exchange PARK publishes a failed message to. It’s only needed with PARK, together with the routing key.
occurrent.broker.rabbitmq.source.parking-destination.routing-keynoneThe routing key PARK publishes a failed message with.
occurrent.broker.rabbitmq.source.retry.initial100msThe first delay when building a source retries.
occurrent.broker.rabbitmq.source.retry.max2sThe longest delay between two retries.
occurrent.broker.rabbitmq.source.retry.multiplier2.0What the delay is multiplied by after each retry.
occurrent.broker.rabbitmq.source.retry.max-attempts10How many times building a source tries before it fails.

These still work, and will be removed two releases after 0.34.0. You can set a deprecated key and its replacement together as long as they have the same value. The Spring Boot starter page says how to migrate.

Deprecated propertyUse instead
occurrent.event-store.collectionoccurrent.event-store.mongodb.collection
occurrent.event-store.time-representationoccurrent.event-store.mongodb.time-representation
occurrent.subscription.collectionoccurrent.subscription.mongodb.collection
occurrent.subscription.restart-on-change-stream-history-lostoccurrent.subscription.mongodb.restart-on-change-stream-history-lost
occurrent.subscription.enabledoccurrent.subscription.mode, where false is DISABLED and true is AUTO