Skip to content

Spring Properties Reference ​

This page documents the current dsm.* Spring Boot configuration surface. It is organized to match DsmProperties in dsm-spring-boot-autoconfigure.

Use the Spring Boot guide for the integration sequence. Use this page when you need exact property names, defaults, and validation boundaries.

Root Properties ​

PropertyDefaultRequiredNotes
dsm.cluster-idnoneyesLogical DSM cluster boundary. Nodes with different cluster IDs must not share runtime traffic.
dsm.service-idnoneyesService-family boundary inside a cluster. Peers for one service should share this value.

Node Properties ​

PropertyDefaultRequiredNotes
dsm.node.idrandom UUIDnoSet explicitly in production so diagnostics and lease ownership are stable across restarts when that is desired.
dsm.node.hostresolved local host addressnoMust be reachable by peers in real multi-node deployments.
dsm.node.port9090noLocal DSM node port used by the selected membership/runtime wiring.

Runtime Properties ​

PropertyDefaultRequiredNotes
dsm.runtime.dynamic-registrationfalsenoAllows collection registration after runtime construction. Prefer false for predictable production bootstrap.
dsm.runtime.eviction-scan-interval60snoHow often the default runtime scans registered collections with non-empty eviction policies.

Cluster Properties ​

PropertyDefaultRequiredNotes
dsm.cluster.modeSTANDALONEnoAllowed values: STANDALONE, MULTICAST, UNICAST.

Multicast ​

PropertyDefaultRequiredNotes
dsm.cluster.multicast.group239.0.77.1noMulticast group for trusted LAN/VPC discovery.
dsm.cluster.multicast.port4446noMulticast discovery port.
dsm.cluster.multicast.heartbeat-interval1snoHeartbeat interval used by multicast membership.
dsm.cluster.multicast.failure-threshold5noMissed heartbeat threshold before peer failure handling.

Unicast Gossip ​

PropertyDefaultRequiredNotes
dsm.cluster.unicast.gossip-port4447noGossip transport port.
dsm.cluster.unicast.gossip-interval1snoInterval between gossip rounds.
dsm.cluster.unicast.gossip-fanout3noNumber of peers contacted per gossip round.
dsm.cluster.unicast.failure-threshold5noBase failure detection threshold.
dsm.cluster.unicast.suspicion-enabledtruenoEnables SWIM-style SUSPECT before confirmed failure.
dsm.cluster.unicast.suspicion-quorum3noIndependent reporters needed to confirm suspicion. Must be positive.
dsm.cluster.unicast.suspicion-timeoutderivednoDefaults to gossip-interval * failure-threshold * 2; must be positive when set.
dsm.cluster.unicast.seed-nodesempty listnoStatic seed nodes, usually host:port.
dsm.cluster.unicast.dns.hostnamenonenoDNS seed hostname, commonly a Kubernetes headless service.
dsm.cluster.unicast.dns.port9090noPort used for DNS-discovered seed nodes.

Sync Properties ​

Delta Coalescing ​

PropertyDefaultRequiredNotes
dsm.sync.delta-coalescing.enabledfalsenoEnables short-window batching of outbound deltas.
dsm.sync.delta-coalescing.window-duration10msnoCoalescing window. Keep this small; it trades latency for fewer messages.
dsm.sync.delta-coalescing.max-batch-size64noMaximum number of deltas in one batch.

Proactive Anti-Entropy ​

PropertyDefaultRequiredNotes
dsm.sync.anti-entropy.sweep-enabledtruenoStarts background data-plane repair sweeps. Disable only for tightly controlled tests.
dsm.sync.anti-entropy.sweep-interval30snoInterval between sweep rounds.
dsm.sync.anti-entropy.max-concurrent-repairs2noMaximum repair attempts initiated in one sweep round.

Observability Properties ​

PropertyDefaultRequiredNotes
dsm.observability.trace-context.enabledfalsenoEnables inbound HTTP trace-context extraction in Spring wiring so DSM can inject W3C trace context into outbound platform envelopes.

Security Properties ​

PropertyDefaultRequiredNotes
dsm.security.enabledfalsenoEnables secure envelope signing, replay protection, and admission controls.
dsm.security.cluster-secretnonewhen security enabledShared secret material. Prefer environment-backed secret injection.
dsm.security.per-node-key-derivationfalsenoDerives per-node keys from cluster secret material when enabled.
dsm.security.min-acceptable-key-version1noRejects envelopes below this signing key version to prevent downgrade.
dsm.security.challenge-interval5mnoInterval for cluster re-authentication challenge behavior.

Nonce Replay Protection ​

PropertyDefaultRequiredNotes
dsm.security.nonce.window-size1024noAccepted replay window retained per sender.
dsm.security.nonce.max-clock-drift5snoMaximum tolerated timestamp drift for replay validation.
dsm.security.nonce.max-tracked-senders1600noMaximum sender replay windows retained before LRU eviction. Spring validates 100..10000.

Sender Rate Limiting ​

PropertyDefaultRequiredNotes
dsm.security.rate-limit.max-consecutive-failures10noConsecutive verification failures required before a sender is temporarily banned.
dsm.security.rate-limit.ban-duration30snoDuration of a temporary sender ban.

Payload Encryption ​

PropertyDefaultRequiredNotes
dsm.security.encryption.enabledfalsenoEnables secure-envelope payload encryption. Nodes requiring encryption reject plaintext inbound envelopes before HMAC verification.
dsm.security.encryption.algorithmChaCha20-Poly1305noBuilt-in options include ChaCha20-Poly1305 and AES-256-GCM.
dsm.security.encryption.key-derivation-saltdsm-encryptionnoHKDF salt used to derive payload encryption keys from cluster secret material.

Collection Definitions ​

Collections are configured as list items under dsm.collections.

Common Fields ​

FieldDefaultRequiredNotes
bean-namenonenoExplicit Spring bean alias. Must be unique when supplied.
tenant-idnoneyesFirst part of the collection locator.
application-idnoneyesSecond part of the collection locator.
collection-idnoneyesThird part of the collection locator.
schema-idnoneyesLogical payload compatibility identifier. Change when semantics are not safely compatible.
typeREGISTERnoAllowed values: REGISTER, LEASE, CRDT.
consistency-tierREGISTERconditionallyMust match the collection type in practice.
entity-typenoneconditionallyFully qualified entity class used for RecordCodec derivation when codec-bean is omitted.
codec-beannoneconditionallyExplicit entity codec bean. Required unless entity-type can derive a record codec.
qos-profiletype defaultnoBuilt-in values: best-effort-meta, control-critical, standard.
replication-profiletype defaultnoBuilt-in values: embedded-register, embedded-lease, embedded-crdt.
persistence-profiletype defaultnoBuilt-in values: ephemeral, local-durable.

Type And Tier Rules ​

Collection typeRequired consistency-tierDefault QoSDefault replicationDefault persistence
REGISTERREGISTERbest-effort-metaembedded-registerephemeral
LEASELEASEcontrol-criticalembedded-leaselocal-durable
CRDTCRDTstandardembedded-crdtlocal-durable

Lease Fields ​

Nested under dsm.collections[].lease.

FieldDefaultRequiredNotes
modeAUTONOMOUSnoAUTONOMOUS allows local lease decisions; QUORUM gates acquire, renew, and transfer on stable majority visibility.
quorum-stability-rounds3for QUORUM tuningStable membership rounds required before QUORUM lease mutations are allowed. Must be at least 1.
term10snoLease term. Must be positive.
renew-skew3snoRenewal window. Must be positive and smaller than term.
expiry-grace500msnoExtra grace after term expiry. Must be positive.
entity-factory-beannoneyes for leaseFactory used to create blank lease entities by entry key.

CRDT Fields ​

Nested under dsm.collections[].crdt.

FieldDefaultRequiredNotes
state-codec-beannoneyes for CRDTCodec for CRDT state snapshots.
initial-state-beannoneyes for CRDTInitial state supplier/bean used at collection creation.
merger-beannoneyes for CRDTState merger used to converge local and remote updates.

Bean Naming Rules ​

Every configured collection handle receives a stable bean name:

dsmCollection:<tenant>/<application>/<collection>

If bean-name is set, that value is registered as an alias in addition to the stable name.

Startup Failure Conditions ​

Spring startup fails fast when:

  • required root properties are blank
  • a collection is missing locator or schema fields
  • neither codec-bean nor derivable entity-type is available
  • a referenced supporting bean does not exist
  • two collections use the same locator
  • two collections reuse the same explicit bean-name
  • collection type and consistency tier do not match
  • lease timing values are non-positive
  • renew-skew >= term
  • quorum-stability-rounds < 1
  • dsm.security.nonce.max-tracked-senders is outside 100..10000

Minimal Example ​

yaml
dsm:
  cluster-id: runtime-example
  service-id: gateway-service
  cluster:
    mode: STANDALONE
  collections:
    - bean-name: routeHintsCollection
      tenant-id: shared
      application-id: gateway
      collection-id: route-hints
      schema-id: route-hints/v1
      type: REGISTER
      consistency-tier: REGISTER
      entity-type: com.example.RouteHint

Secure Production Example ​

yaml
dsm:
  cluster-id: prod-eu-west
  service-id: gateway-service
  cluster:
    mode: UNICAST
    unicast:
      gossip-port: 4447
      gossip-interval: 1s
      gossip-fanout: 3
      failure-threshold: 5
      suspicion-enabled: true
      suspicion-quorum: 3
      seed-nodes:
        - 10.0.0.11:4447
        - 10.0.0.12:4447
  sync:
    anti-entropy:
      sweep-enabled: true
      sweep-interval: 30s
      max-concurrent-repairs: 2
  observability:
    trace-context:
      enabled: true
  security:
    enabled: true
    cluster-secret: ${DSM_CLUSTER_SECRET}
    min-acceptable-key-version: 1
    nonce:
      window-size: 1024
      max-clock-drift: 5s
      max-tracked-senders: 1600
    rate-limit:
      max-consecutive-failures: 10
      ban-duration: 30s
    encryption:
      enabled: true
      algorithm: ChaCha20-Poly1305
      key-derivation-salt: ${DSM_ENCRYPTION_SALT}