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

== Spring Boot Auto-Configuration

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


The component supports 33 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.aws-ddb.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-ddb.amazon-d-d-b-client* | To use the AmazonDynamoDB as the client. The option is a com.amazonaws.services.dynamodbv2.AmazonDynamoDB type. |  | AmazonDynamoDB
| *camel.component.aws-ddb.auto-discover-client* | Setting the autoDiscoverClient mechanism, if true, the component will look for a client instance in the registry automatically otherwise it will skip that checking. | true | Boolean
| *camel.component.aws-ddb.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.aws-ddb.configuration* | The component configuration. The option is a org.apache.camel.component.aws.ddb.DdbConfiguration type. |  | DdbConfiguration
| *camel.component.aws-ddb.consistent-read* | Determines whether or not strong consistency should be enforced when data is read. | false | Boolean
| *camel.component.aws-ddb.enabled* | Whether to enable auto configuration of the aws-ddb component. This is enabled by default. |  | Boolean
| *camel.component.aws-ddb.key-attribute-name* | Attribute name when creating table |  | String
| *camel.component.aws-ddb.key-attribute-type* | Attribute type when creating table |  | String
| *camel.component.aws-ddb.lazy-start-producer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | Boolean
| *camel.component.aws-ddb.operation* | What operation to perform |  | DdbOperations
| *camel.component.aws-ddb.proxy-host* | To define a proxy host when instantiating the DDB client |  | String
| *camel.component.aws-ddb.proxy-port* | To define a proxy port when instantiating the DDB client. When using this parameter, the configuration will expect the capitalized name of the region (for example AP_EAST_1) You'll need to use the name Regions.EU_WEST_1.name() |  | Integer
| *camel.component.aws-ddb.proxy-protocol* | To define a proxy protocol when instantiating the DDB client |  | Protocol
| *camel.component.aws-ddb.read-capacity* | The provisioned throughput to reserve for reading resources from your table |  | Long
| *camel.component.aws-ddb.region* | The region in which DDB client needs to work |  | String
| *camel.component.aws-ddb.secret-key* | Amazon AWS Secret Key |  | String
| *camel.component.aws-ddb.write-capacity* | The provisioned throughput to reserved for writing resources to your table |  | Long
| *camel.component.aws-ddbstream.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws-ddbstream.amazon-dynamo-db-streams-client* | Amazon DynamoDB client to use for all requests for this endpoint. The option is a com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreams type. |  | AmazonDynamoDBStreams
| *camel.component.aws-ddbstream.auto-discover-client* | Setting the autoDiscoverClient mechanism, if true, the component will look for a client instance in the registry automatically otherwise it will skip that checking | true | Boolean
| *camel.component.aws-ddbstream.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.aws-ddbstream.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.aws-ddbstream.configuration* | The component configuration. The option is a org.apache.camel.component.aws.ddbstream.DdbStreamConfiguration type. |  | DdbStreamConfiguration
| *camel.component.aws-ddbstream.enabled* | Whether to enable auto configuration of the aws-ddbstream component. This is enabled by default. |  | Boolean
| *camel.component.aws-ddbstream.iterator-type* | Defines where in the DynaboDB stream to start getting records. Note that using TRIM_HORIZON can cause a significant delay before the stream has caught up to real-time. if {AT,AFTER}_SEQUENCE_NUMBER are used, then a sequenceNumberProvider MUST be supplied. |  | ShardIteratorType
| *camel.component.aws-ddbstream.max-results-per-request* | Maximum number of records that will be fetched in each poll |  | Integer
| *camel.component.aws-ddbstream.proxy-host* | To define a proxy host when instantiating the DDBStreams client |  | String
| *camel.component.aws-ddbstream.proxy-port* | To define a proxy port when instantiating the DDBStreams client |  | Integer
| *camel.component.aws-ddbstream.proxy-protocol* | To define a proxy protocol when instantiating the DDBStreams client |  | Protocol
| *camel.component.aws-ddbstream.region* | The region in which DDBStreams client needs to work |  | String
| *camel.component.aws-ddbstream.secret-key* | Amazon AWS Secret Key |  | String
| *camel.component.aws-ddbstream.sequence-number-provider* | Provider for the sequence number when using one of the two ShardIteratorType.{AT,AFTER}_SEQUENCE_NUMBER iterator types. Can be a registry reference or a literal sequence number. The option is a org.apache.camel.component.aws.ddbstream.SequenceNumberProvider type. |  | SequenceNumberProvider
|===
// spring-boot-auto-configure options: END
