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

== Spring Boot Auto-Configuration

When using debezium-postgres 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-postgres-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 90 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.debezium-postgres.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-postgres.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-postgres.binary-handling-mode* | Specify how binary (blob, binary, etc.) columns should be represented in change events, including:'bytes' represents binary data as byte array (default)'base64' represents binary data as base64-encoded string'hex' represents binary data as hex-encoded (base16) string | bytes | String
| *camel.component.debezium-postgres.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-postgres.column-blacklist* | Regular expressions matching columns to exclude from change events (deprecated, use column.exclude.list instead) |  | String
| *camel.component.debezium-postgres.column-exclude-list* | Regular expressions matching columns to exclude from change events |  | String
| *camel.component.debezium-postgres.column-include-list* | Regular expressions matching columns to include in change events |  | String
| *camel.component.debezium-postgres.column-propagate-source-type* | A comma-separated list of regular expressions matching fully-qualified names of columns that adds the columns original type and original length as parameters to the corresponding field schemas in the emitted change records. |  | String
| *camel.component.debezium-postgres.column-whitelist* | Regular expressions matching columns to include in change events (deprecated, use column.include.list instead) |  | String
| *camel.component.debezium-postgres.configuration* | Allow pre-configured Configurations to be set. The option is a org.apache.camel.component.debezium.configuration.PostgresConnectorEmbeddedDebeziumConfiguration type. |  | PostgresConnectorEmbeddedDebeziumConfiguration
| *camel.component.debezium-postgres.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-postgres.database-dbname* | The name of the database the connector should be monitoring |  | String
| *camel.component.debezium-postgres.database-history-file-filename* | The path to the file that will be used to record the database history |  | String
| *camel.component.debezium-postgres.database-hostname* | Resolvable hostname or IP address of the database server. |  | String
| *camel.component.debezium-postgres.database-initial-statements* | A semicolon separated list of SQL statements to be executed when a JDBC connection to the database is established. Note that the connector may establish JDBC connections at its own discretion, so this should typically be used for configurationof session parameters only, but not for executing DML statements. Use doubled semicolon (';;') to use a semicolon as a character and not as a delimiter. |  | String
| *camel.component.debezium-postgres.database-password* | Password of the database user to be used when connecting to the database. |  | String
| *camel.component.debezium-postgres.database-port* | Port of the database server. | 5432 | Integer
| *camel.component.debezium-postgres.database-server-name* | Unique name that identifies the database server and all recorded offsets, and that is used as a prefix for all schemas and topics. Each distinct installation should have a separate namespace and be monitored by at most one Debezium connector. |  | String
| *camel.component.debezium-postgres.database-sslcert* | File containing the SSL Certificate for the client. See the Postgres SSL docs for further information |  | String
| *camel.component.debezium-postgres.database-sslfactory* | A name of class to that creates SSL Sockets. Use org.postgresql.ssl.NonValidatingFactory to disable SSL validation in development environments |  | String
| *camel.component.debezium-postgres.database-sslkey* | File containing the SSL private key for the client. See the Postgres SSL docs for further information |  | String
| *camel.component.debezium-postgres.database-sslmode* | Whether to use an encrypted connection to Postgres. Options include'disable' (the default) to use an unencrypted connection; 'require' to use a secure (encrypted) connection, and fail if one cannot be established; 'verify-ca' like 'required' but additionally verify the server TLS certificate against the configured Certificate Authority (CA) certificates, or fail if no valid matching CA certificates are found; or'verify-full' like 'verify-ca' but additionally verify that the server certificate matches the host to which the connection is attempted. | disable | String
| *camel.component.debezium-postgres.database-sslpassword* | Password to access the client private key from the file specified by 'database.sslkey'. See the Postgres SSL docs for further information |  | String
| *camel.component.debezium-postgres.database-sslrootcert* | File containing the root certificate(s) against which the server is validated. See the Postgres JDBC SSL docs for further information |  | String
| *camel.component.debezium-postgres.database-tcpkeepalive* | Enable or disable TCP keep-alive probe to avoid dropping TCP connection | true | Boolean
| *camel.component.debezium-postgres.database-user* | Name of the database user to be used when connecting to the database. |  | String
| *camel.component.debezium-postgres.datatype-propagate-source-type* | A comma-separated list of regular expressions matching the database-specific data type names that adds the data type's original type and original length as parameters to the corresponding field schemas in the emitted change records. |  | String
| *camel.component.debezium-postgres.decimal-handling-mode* | Specify how DECIMAL and NUMERIC columns should be represented in change events, including:'precise' (the default) uses java.math.BigDecimal to represent values, which are encoded in the change events using a binary representation and Kafka Connect's 'org.apache.kafka.connect.data.Decimal' type; 'string' uses string to represent values; 'double' represents values using Java's 'double', which may not offer the precision but will be far easier to use in consumers. | precise | String
| *camel.component.debezium-postgres.enabled* | Whether to enable auto configuration of the debezium-postgres component. This is enabled by default. |  | Boolean
| *camel.component.debezium-postgres.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-postgres.heartbeat-action-query* | The query executed with every heartbeat. |  | String
| *camel.component.debezium-postgres.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-postgres.heartbeat-topics-prefix* | The prefix that is used to name heartbeat topics.Defaults to __debezium-heartbeat. | __debezium-heartbeat | String
| *camel.component.debezium-postgres.hstore-handling-mode* | Specify how HSTORE columns should be represented in change events, including:'json' represents values as string-ified JSON (default)'map' represents values as a key/value map | json | String
| *camel.component.debezium-postgres.include-unknown-datatypes* | Specify whether the fields of data type not supported by Debezium should be processed:'false' (the default) omits the fields; 'true' converts the field into an implementation dependent binary representation. | false | Boolean
| *camel.component.debezium-postgres.incremental-snapshot-chunk-size* | The maximum size of chunk for incremental snapshotting | 1024 | Integer
| *camel.component.debezium-postgres.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-postgres.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-postgres.interval-handling-mode* | Specify how INTERVAL columns should be represented in change events, including:'string' represents values as an exact ISO formatted string'numeric' (default) represents values using the inexact conversion into microseconds | numeric | String
| *camel.component.debezium-postgres.max-batch-size* | Maximum size of each batch of source records. Defaults to 2048. | 2048 | Integer
| *camel.component.debezium-postgres.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-postgres.max-queue-size-in-bytes* | Maximum size of the queue in bytes for change events read from the database log but not yet recorded or forwarded. Defaults to 0. Mean the feature is not enabled | 0 | Long
| *camel.component.debezium-postgres.message-key-columns* | A semicolon-separated list of expressions that match fully-qualified tables and column(s) to be used as message key. Each expression must match the pattern ':',where the table names could be defined as (DB_NAME.TABLE_NAME) or (SCHEMA_NAME.TABLE_NAME), depending on the specific connector,and the key columns are a comma-separated list of columns representing the custom key. For any table without an explicit key configuration the table's primary key column(s) will be used as message key.Example: dbserver1.inventory.orderlines:orderId,orderLineId;dbserver1.inventory.orders:id |  | String
| *camel.component.debezium-postgres.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-postgres.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-postgres.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-postgres.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-postgres.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-postgres.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-postgres.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-postgres.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-postgres.plugin-name* | The name of the Postgres logical decoding plugin installed on the server. Supported values are 'decoderbufs', 'wal2json', 'pgoutput', 'wal2json_streaming', 'wal2json_rds' and 'wal2json_rds_streaming'. Defaults to 'decoderbufs'. | decoderbufs | String
| *camel.component.debezium-postgres.poll-interval-ms* | Time to wait for new change events to appear after receiving no events, given in milliseconds. Defaults to 500 ms. The option is a long type. | 500 | Long
| *camel.component.debezium-postgres.provide-transaction-metadata* | Enables transaction metadata extraction together with event counting | false | Boolean
| *camel.component.debezium-postgres.publication-autocreate-mode* | Applies only when streaming changes using pgoutput.Determine how creation of a publication should work, the default is all_tables.DISABLED - The connector will not attempt to create a publication at all. The expectation is that the user has created the publication up-front. If the publication isn't found to exist upon startup, the connector will throw an exception and stop.ALL_TABLES - If no publication exists, the connector will create a new publication for all tables. Note this requires that the configured user has access. If the publication already exists, it will be used. i.e CREATE PUBLICATION FOR ALL TABLES;FILTERED - If no publication exists, the connector will create a new publication for all those tables matchingthe current filter configuration (see table/database include/exclude list properties). If the publication already exists, it will be used. i.e CREATE PUBLICATION FOR TABLE | all_tables | String
| *camel.component.debezium-postgres.publication-name* | The name of the Postgres 10 publication used for streaming changes from a plugin.Defaults to 'dbz_publication' | dbz_publication | String
| *camel.component.debezium-postgres.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-postgres.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-postgres.sanitize-field-names* | Whether field names will be sanitized to Avro naming conventions | false | Boolean
| *camel.component.debezium-postgres.schema-blacklist* | The schemas for which events must not be captured (deprecated, use schema.exclude.list instead) |  | String
| *camel.component.debezium-postgres.schema-exclude-list* | The schemas for which events must not be captured |  | String
| *camel.component.debezium-postgres.schema-include-list* | The schemas for which events should be captured |  | String
| *camel.component.debezium-postgres.schema-refresh-mode* | Specify the conditions that trigger a refresh of the in-memory schema for a table. 'columns_diff' (the default) is the safest mode, ensuring the in-memory schema stays in-sync with the database table's schema at all times. 'columns_diff_exclude_unchanged_toast' instructs the connector to refresh the in-memory schema cache if there is a discrepancy between it and the schema derived from the incoming message, unless unchanged TOASTable data fully accounts for the discrepancy. This setting can improve connector performance significantly if there are frequently-updated tables that have TOASTed data that are rarely part of these updates. However, it is possible for the in-memory schema to become outdated if TOASTable columns are dropped from the table. | columns_diff | String
| *camel.component.debezium-postgres.schema-whitelist* | The schemas for which events should be captured (deprecated, use schema.include.list instead) |  | String
| *camel.component.debezium-postgres.signal-data-collection* | The name of the data collection that is used to send signals/commands to Debezium. Signaling is disabled when not set. |  | String
| *camel.component.debezium-postgres.skipped-operations* | The comma-separated list of operations to skip during streaming, defined as: 'c' for inserts/create; 'u' for updates; 'd' for deletes. By default, no operations will be skipped. |  | String
| *camel.component.debezium-postgres.slot-drop-on-stop* | Whether or not to drop the logical replication slot when the connector finishes orderlyBy default the replication is kept so that on restart progress can resume from the last recorded location | false | Boolean
| *camel.component.debezium-postgres.slot-max-retries* | How many times to retry connecting to a replication slot when an attempt fails. | 6 | Integer
| *camel.component.debezium-postgres.slot-name* | The name of the Postgres logical decoding slot created for streaming changes from a plugin.Defaults to 'debezium | debezium | String
| *camel.component.debezium-postgres.slot-retry-delay-ms* | Time to wait between retry attempts when the connector fails to connect to a replication slot, given in milliseconds. Defaults to 10 seconds (10,000 ms). The option is a long type. | 10000 | Long
| *camel.component.debezium-postgres.slot-stream-params* | Any optional parameters used by logical decoding plugin. Semi-colon separated. E.g. 'add-tables=public.table,public.table2;include-lsn=true' |  | String
| *camel.component.debezium-postgres.snapshot-custom-class* | When 'snapshot.mode' is set as custom, this setting must be set to specify a fully qualified class name to load (via the default class loader).This class must implement the 'Snapshotter' interface and is called on each app boot to determine whether to do a snapshot and how to build queries. |  | String
| *camel.component.debezium-postgres.snapshot-delay-ms* | A delay period before a snapshot will begin, given in milliseconds. Defaults to 0 ms. The option is a long type. | 0 | Long
| *camel.component.debezium-postgres.snapshot-fetch-size* | The maximum number of records that should be loaded into memory while performing a snapshot |  | Integer
| *camel.component.debezium-postgres.snapshot-include-collection-list* | this setting must be set to specify a list of tables/collections whose snapshot must be taken on creating or restarting the connector. |  | String
| *camel.component.debezium-postgres.snapshot-lock-timeout-ms* | The maximum number of millis to wait for table locks at the beginning of a snapshot. If locks cannot be acquired in this time frame, the snapshot will be aborted. Defaults to 10 seconds. The option is a long type. | 10000 | Long
| *camel.component.debezium-postgres.snapshot-max-threads* | The maximum number of threads used to perform the snapshot. Defaults to 1. | 1 | Integer
| *camel.component.debezium-postgres.snapshot-mode* | The criteria for running a snapshot upon startup of the connector. Options include: 'always' to specify that the connector run a snapshot each time it starts up; 'initial' (the default) to specify the connector can run a snapshot only when no offsets are available for the logical server name; 'initial_only' same as 'initial' except the connector should stop after completing the snapshot and before it would normally start emitting changes;'never' to specify the connector should never run a snapshot and that upon first startup the connector should read from the last position (LSN) recorded by the server; and'exported' deprecated, use 'initial' instead; 'custom' to specify a custom class with 'snapshot.custom_class' which will be loaded and used to determine the snapshot, see docs for more details. | initial | String
| *camel.component.debezium-postgres.snapshot-select-statement-overrides* | This property contains a comma-separated list of fully-qualified tables (DB_NAME.TABLE_NAME) or (SCHEMA_NAME.TABLE_NAME), depending on thespecific connectors. Select statements for the individual tables are specified in further configuration properties, one for each table, identified by the id 'snapshot.select.statement.overrides.DB_NAME.TABLE_NAME' or 'snapshot.select.statement.overrides.SCHEMA_NAME.TABLE_NAME', respectively. The value of those properties is the select statement to use when retrieving data from the specific table during snapshotting. A possible use case for large append-only tables is setting a specific point where to start (resume) snapshotting, in case a previous snapshotting was interrupted. |  | String
| *camel.component.debezium-postgres.source-struct-version* | A version of the format of the publicly visible source part in the message | v2 | String
| *camel.component.debezium-postgres.status-update-interval-ms* | Frequency for sending replication connection status updates to the server, given in milliseconds. Defaults to 10 seconds (10,000 ms). The option is a int type. | 10000 | Integer
| *camel.component.debezium-postgres.table-blacklist* | A comma-separated list of regular expressions that match the fully-qualified names of tables to be excluded from monitoring (deprecated, use table.exclude.list instead) |  | String
| *camel.component.debezium-postgres.table-exclude-list* | A comma-separated list of regular expressions that match the fully-qualified names of tables to be excluded from monitoring |  | String
| *camel.component.debezium-postgres.table-ignore-builtin* | Flag specifying whether built-in tables should be ignored. | true | Boolean
| *camel.component.debezium-postgres.table-include-list* | The tables for which changes are to be captured |  | String
| *camel.component.debezium-postgres.table-whitelist* | The tables for which changes are to be captured (deprecated, use table.include.list instead) |  | String
| *camel.component.debezium-postgres.time-precision-mode* | Time, date, and timestamps can be represented with different kinds of precisions, including:'adaptive' (the default) bases the precision of time, date, and timestamp values on the database column's precision; 'adaptive_time_microseconds' like 'adaptive' mode, but TIME fields always use microseconds precision;'connect' always represents time, date, and timestamp values using Kafka Connect's built-in representations for Time, Date, and Timestamp, which uses millisecond precision regardless of the database columns' precision . | adaptive | String
| *camel.component.debezium-postgres.toasted-value-placeholder* | Specify the constant that will be provided by Debezium to indicate that the original value is a toasted value not provided by the database. If starts with 'hex:' prefix it is expected that the rest of the string repesents hexadecimally encoded octets. | __debezium_unavailable_value | String
| *camel.component.debezium-postgres.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
| *camel.component.debezium-postgres.xmin-fetch-interval-ms* | Specify how often (in ms) the xmin will be fetched from the replication slot. This xmin value is exposed by the slot which gives a lower bound of where a new replication slot could start from. The lower the value, the more likely this value is to be the current 'true' value, but the bigger the performance cost. The bigger the value, the less likely this value is to be the current 'true' value, but the lower the performance penalty. The default is set to 0 ms, which disables tracking xmin. The option is a long type. | 0 | Long
|===
// spring-boot-auto-configure options: END
