// spring-boot-auto-configure options: START
:page-partial:
:doctitle: Camel Spring Boot Starter for debezium-mongodb

== Spring Boot Auto-Configuration

When using debezium-mongodb with Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-debezium-mongodb-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 55 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.debezium-mongodb.additional-properties* | Additional properties for debezium components in case they can't be set directly on the camel configurations (e.g: setting Kafka Connect properties needed by Debezium engine, for example setting KafkaOffsetBackingStore), the properties have to be prefixed with additionalProperties.. E.g: additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=\http://localhost:8811/avro |  | Map
| *camel.component.debezium-mongodb.autowired-enabled* | Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc. | true | Boolean
| *camel.component.debezium-mongodb.bridge-error-handler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | Boolean
| *camel.component.debezium-mongodb.collection-exclude-list* | A comma-separated list of regular expressions that match the collection names for which changes are to be excluded |  | String
| *camel.component.debezium-mongodb.collection-include-list* | A comma-separated list of regular expressions that match the collection names for which changes are to be captured |  | String
| *camel.component.debezium-mongodb.configuration* | Allow pre-configured Configurations to be set. The option is a org.apache.camel.component.debezium.configuration.MongoDbConnectorEmbeddedDebeziumConfiguration type. |  | MongoDbConnectorEmbeddedDebeziumConfiguration
| *camel.component.debezium-mongodb.connect-backoff-initial-delay-ms* | The initial delay when trying to reconnect to a primary after a connection cannot be made or when no primary is available. Defaults to 1 second (1000 ms). The option is a long type. | 1000 | Long
| *camel.component.debezium-mongodb.connect-backoff-max-delay-ms* | The maximum delay when trying to reconnect to a primary after a connection cannot be made or when no primary is available. Defaults to 120 second (120,000 ms). The option is a long type. | 120000 | Long
| *camel.component.debezium-mongodb.connect-max-attempts* | Maximum number of failed connection attempts to a replica set primary before an exception occurs and task is aborted. Defaults to 16, which with the defaults for 'connect.backoff.initial.delay.ms' and 'connect.backoff.max.delay.ms' results in just over 20 minutes of attempts before failing. | 16 | Integer
| *camel.component.debezium-mongodb.converters* | Optional list of custom converters that would be used instead of default ones. The converters are defined using '.type' config option and configured using options '.' |  | String
| *camel.component.debezium-mongodb.database-exclude-list* | A comma-separated list of regular expressions that match the database names for which changes are to be excluded |  | String
| *camel.component.debezium-mongodb.database-history-file-filename* | The path to the file that will be used to record the database history |  | String
| *camel.component.debezium-mongodb.database-include-list* | A comma-separated list of regular expressions that match the database names for which changes are to be captured |  | String
| *camel.component.debezium-mongodb.enabled* | Whether to enable auto configuration of the debezium-mongodb component. This is enabled by default. |  | Boolean
| *camel.component.debezium-mongodb.event-processing-failure-handling-mode* | Specify how failures during processing of events (i.e. when encountering a corrupted event) should be handled, including:'fail' (the default) an exception indicating the problematic event and its position is raised, causing the connector to be stopped; 'warn' the problematic event and its position will be logged and the event will be skipped;'ignore' the problematic event will be skipped. | fail | String
| *camel.component.debezium-mongodb.field-exclude-list* | A comma-separated list of the fully-qualified names of fields that should be excluded from change event message values |  | String
| *camel.component.debezium-mongodb.field-renames* | Description is not available here, please check Debezium website for corresponding key 'field.renames' description. |  | String
| *camel.component.debezium-mongodb.heartbeat-interval-ms* | Length of an interval in milli-seconds in in which the connector periodically sends heartbeat messages to a heartbeat topic. Use 0 to disable heartbeat messages. Disabled by default. The option is a int type. | 0 | Integer
| *camel.component.debezium-mongodb.heartbeat-topics-prefix* | The prefix that is used to name heartbeat topics.Defaults to __debezium-heartbeat. | __debezium-heartbeat | String
| *camel.component.debezium-mongodb.initial-sync-max-threads* | Maximum number of threads used to perform an initial sync of the collections in a replica set. Defaults to 1. | 1 | Integer
| *camel.component.debezium-mongodb.internal-key-converter* | The Converter class that should be used to serialize and deserialize key data for offsets. The default is JSON converter. | org.apache.kafka.connect.json.JsonConverter | String
| *camel.component.debezium-mongodb.internal-value-converter* | The Converter class that should be used to serialize and deserialize value data for offsets. The default is JSON converter. | org.apache.kafka.connect.json.JsonConverter | String
| *camel.component.debezium-mongodb.max-batch-size* | Maximum size of each batch of source records. Defaults to 2048. | 2048 | Integer
| *camel.component.debezium-mongodb.max-queue-size* | Maximum size of the queue for change events read from the database log but not yet recorded or forwarded. Defaults to 8192, and should always be larger than the maximum batch size. | 8192 | Integer
| *camel.component.debezium-mongodb.mongodb-authsource* | Database containing user credentials. | admin | String
| *camel.component.debezium-mongodb.mongodb-connect-timeout-ms* | The connection timeout in milliseconds. The option is a int type. | 10000 | Integer
| *camel.component.debezium-mongodb.mongodb-hosts* | The hostname and port pairs (in the form 'host' or 'host:port') of the MongoDB server(s) in the replica set. |  | String
| *camel.component.debezium-mongodb.mongodb-members-auto-discover* | Specifies whether the addresses in 'hosts' are seeds that should be used to discover all members of the cluster or replica set ('true'), or whether the address(es) in 'hosts' should be used as is ('false'). The default is 'true'. | true | Boolean
| *camel.component.debezium-mongodb.mongodb-name* | Unique name that identifies the MongoDB replica set or cluster and all recorded offsets, andthat is used as a prefix for all schemas and topics. Each distinct MongoDB installation should have a separate namespace and monitored by at most one Debezium connector. |  | String
| *camel.component.debezium-mongodb.mongodb-password* | Password to be used when connecting to MongoDB, if necessary. |  | String
| *camel.component.debezium-mongodb.mongodb-poll-interval-ms* | Frequency in milliseconds to look for new, removed, or changed replica sets. Defaults to 30000 milliseconds. The option is a long type. | 30000 | Long
| *camel.component.debezium-mongodb.mongodb-server-selection-timeout-ms* | The server selection timeout in milliseconds. The option is a int type. | 30000 | Integer
| *camel.component.debezium-mongodb.mongodb-socket-timeout-ms* | The socket timeout in milliseconds. The option is a int type. | 0 | Integer
| *camel.component.debezium-mongodb.mongodb-ssl-enabled* | Should connector use SSL to connect to MongoDB instances | false | Boolean
| *camel.component.debezium-mongodb.mongodb-ssl-invalid-hostname-allowed* | Whether invalid host names are allowed when using SSL. If true the connection will not prevent man-in-the-middle attacks | false | Boolean
| *camel.component.debezium-mongodb.mongodb-user* | Database user for connecting to MongoDB, if necessary. |  | String
| *camel.component.debezium-mongodb.offset-commit-policy* | The name of the Java class of the commit policy. It defines when offsets commit has to be triggered based on the number of events processed and the time elapsed since the last commit. This class must implement the interface 'OffsetCommitPolicy'. The default is a periodic commit policy based upon time intervals. | io.debezium.embedded.spi.OffsetCommitPolicy.PeriodicCommitOffsetPolicy | String
| *camel.component.debezium-mongodb.offset-commit-timeout-ms* | Maximum number of milliseconds to wait for records to flush and partition offset data to be committed to offset storage before cancelling the process and restoring the offset data to be committed in a future attempt. The default is 5 seconds. The option is a long type. | 5000 | Long
| *camel.component.debezium-mongodb.offset-flush-interval-ms* | Interval at which to try committing offsets. The default is 1 minute. The option is a long type. | 60000 | Long
| *camel.component.debezium-mongodb.offset-storage* | The name of the Java class that is responsible for persistence of connector offsets. | org.apache.kafka.connect.storage.FileOffsetBackingStore | String
| *camel.component.debezium-mongodb.offset-storage-file-name* | Path to file where offsets are to be stored. Required when offset.storage is set to the FileOffsetBackingStore. |  | String
| *camel.component.debezium-mongodb.offset-storage-partitions* | The number of partitions used when creating the offset storage topic. Required when offset.storage is set to the 'KafkaOffsetBackingStore'. |  | Integer
| *camel.component.debezium-mongodb.offset-storage-replication-factor* | Replication factor used when creating the offset storage topic. Required when offset.storage is set to the KafkaOffsetBackingStore |  | Integer
| *camel.component.debezium-mongodb.offset-storage-topic* | The name of the Kafka topic where offsets are to be stored. Required when offset.storage is set to the KafkaOffsetBackingStore. |  | String
| *camel.component.debezium-mongodb.poll-interval-ms* | Frequency in milliseconds to wait for new change events to appear after receiving no events. Defaults to 500ms. The option is a long type. | 500 | Long
| *camel.component.debezium-mongodb.provide-transaction-metadata* | Enables transaction metadata extraction together with event counting | false | Boolean
| *camel.component.debezium-mongodb.query-fetch-size* | The maximum number of records that should be loaded into memory while streaming. A value of 0 uses the default JDBC fetch size. | 0 | Integer
| *camel.component.debezium-mongodb.retriable-restart-connector-wait-ms* | Time to wait before restarting connector after retriable exception occurs. Defaults to 10000ms. The option is a long type. | 10000 | Long
| *camel.component.debezium-mongodb.sanitize-field-names* | Whether field names will be sanitized to Avro naming conventions | false | Boolean
| *camel.component.debezium-mongodb.skipped-operations* | The comma-separated list of operations to skip during streaming, defined as: 'i' for inserts; 'u' for updates; 'd' for deletes. By default, no operations will be skipped. |  | String
| *camel.component.debezium-mongodb.snapshot-delay-ms* | The number of milliseconds to delay before a snapshot will begin. The option is a long type. | 0 | Long
| *camel.component.debezium-mongodb.snapshot-fetch-size* | The maximum number of records that should be loaded into memory while performing a snapshot |  | Integer
| *camel.component.debezium-mongodb.snapshot-mode* | The criteria for running a snapshot upon startup of the connector. Options include: 'initial' (the default) to specify the connector should always perform an initial sync when required; 'never' to specify the connector should never perform an initial sync | initial | String
| *camel.component.debezium-mongodb.source-struct-version* | A version of the format of the publicly visible source part in the message | v2 | String
| *camel.component.debezium-mongodb.tombstones-on-delete* | Whether delete operations should be represented by a delete event and a subsquenttombstone event (true) or only by a delete event (false). Emitting the tombstone event (the default behavior) allows Kafka to completely delete all events pertaining to the given key once the source record got deleted. | false | Boolean
|===
// spring-boot-auto-configure options: END
