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

== Spring Boot Auto-Configuration

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


The component supports 51 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.aws2-s3.access-key* | Amazon AWS Access Key |  | String
| *camel.component.aws2-s3.amazon-s3-client* | Reference to a com.amazonaws.services.s3.AmazonS3 in the registry. The option is a software.amazon.awssdk.services.s3.S3Client type. |  | S3Client
| *camel.component.aws2-s3.amazon-s3-presigner* | An S3 Presigner for Request, used mainly in createDownloadLink operation. The option is a software.amazon.awssdk.services.s3.presigner.S3Presigner type. |  | S3Presigner
| *camel.component.aws2-s3.auto-create-bucket* | Setting the autocreation of the S3 bucket bucketName. This will apply also in case of moveAfterRead option enabled and it will create the destinationBucket if it doesn't exist already. | false | Boolean
| *camel.component.aws2-s3.autoclose-body* | If this option is true and includeBody is false, then the S3Object.close() method will be called on exchange completion. This option is strongly related to includeBody option. In case of setting includeBody to false and autocloseBody to false, it will be up to the caller to close the S3Object stream. Setting autocloseBody to true, will close the S3Object stream automatically. | true | Boolean
| *camel.component.aws2-s3.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.aws2-s3.aws-k-m-s-key-id* | Define the id of KMS key to use in case KMS is enabled |  | String
| *camel.component.aws2-s3.batch-message-number* | The number of messages composing a batch in streaming upload mode | 10 | Integer
| *camel.component.aws2-s3.batch-size* | The batch size (in bytes) in streaming upload mode | 1000000 | Integer
| *camel.component.aws2-s3.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.aws2-s3.configuration* | The component configuration. The option is a org.apache.camel.component.aws2.s3.AWS2S3Configuration type. |  | AWS2S3Configuration
| *camel.component.aws2-s3.customer-algorithm* | Define the customer algorithm to use in case CustomerKey is enabled |  | String
| *camel.component.aws2-s3.customer-key-id* | Define the id of Customer key to use in case CustomerKey is enabled |  | String
| *camel.component.aws2-s3.customer-key-m-d5* | Define the MD5 of Customer key to use in case CustomerKey is enabled |  | String
| *camel.component.aws2-s3.delete-after-read* | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs, the object is not deleted. If this option is false, then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the AWS2S3Constants#BUCKET_NAME and AWS2S3Constants#KEY headers, or only the AWS2S3Constants#KEY header. | true | Boolean
| *camel.component.aws2-s3.delete-after-write* | Delete file object after the S3 file has been uploaded | false | Boolean
| *camel.component.aws2-s3.delimiter* | The delimiter which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
| *camel.component.aws2-s3.destination-bucket* | Define the destination bucket where an object must be moved when moveAfterRead is set to true. |  | String
| *camel.component.aws2-s3.destination-bucket-prefix* | Define the destination bucket prefix to use when an object must be moved and moveAfterRead is set to true. |  | String
| *camel.component.aws2-s3.destination-bucket-suffix* | Define the destination bucket suffix to use when an object must be moved and moveAfterRead is set to true. |  | String
| *camel.component.aws2-s3.done-file-name* | If provided, Camel will only consume files if a done file exists. |  | String
| *camel.component.aws2-s3.enabled* | Whether to enable auto configuration of the aws2-s3 component. This is enabled by default. |  | Boolean
| *camel.component.aws2-s3.file-name* | To get the object from the bucket with the given file name |  | String
| *camel.component.aws2-s3.ignore-body* | If it is true, the S3 Object Body will be ignored completely, if it is set to false the S3 Object will be put in the body. Setting this to true, will override any behavior defined by includeBody option. | false | Boolean
| *camel.component.aws2-s3.include-body* | If it is true, the S3Object exchange will be consumed and put into the body and closed. If false the S3Object stream will be put raw into the body and the headers will be set with the S3 object metadata. This option is strongly related to autocloseBody option. In case of setting includeBody to true because the S3Object stream will be consumed then it will also be closed, while in case of includeBody false then it will be up to the caller to close the S3Object stream. However setting autocloseBody to true when includeBody is false it will schedule to close the S3Object stream automatically on exchange completion. | true | Boolean
| *camel.component.aws2-s3.include-folders* | If it is true, the folders/directories will be consumed. If it is false, they will be ignored, and Exchanges will not be created for those | true | Boolean
| *camel.component.aws2-s3.key-name* | Setting the key name for an element in the bucket through endpoint parameter |  | String
| *camel.component.aws2-s3.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.aws2-s3.move-after-read* | Move objects from S3 bucket to a different bucket after they have been retrieved. To accomplish the operation the destinationBucket option must be set. The copy bucket operation is only performed if the Exchange is committed. If a rollback occurs, the object is not moved. | false | Boolean
| *camel.component.aws2-s3.multi-part-upload* | If it is true, camel will upload the file with multi part format, the part size is decided by the option of partSize | false | Boolean
| *camel.component.aws2-s3.naming-strategy* | The naming strategy to use in streaming upload mode |  | AWSS3NamingStrategyEnum
| *camel.component.aws2-s3.operation* | The operation to do in case the user don't want to do only an upload |  | AWS2S3Operations
| *camel.component.aws2-s3.override-endpoint* | Set the need for overidding the endpoint. This option needs to be used in combination with uriEndpointOverride option | false | Boolean
| *camel.component.aws2-s3.part-size* | Setup the partSize which is used in multi part upload, the default size is 25M. | 26214400 | Long
| *camel.component.aws2-s3.pojo-request* | If we want to use a POJO request as body or not | false | Boolean
| *camel.component.aws2-s3.policy* | The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3#setBucketPolicy() method. |  | String
| *camel.component.aws2-s3.prefix* | The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in. |  | String
| *camel.component.aws2-s3.proxy-host* | To define a proxy host when instantiating the SQS client |  | String
| *camel.component.aws2-s3.proxy-port* | Specify a proxy port to be used inside the client definition. |  | Integer
| *camel.component.aws2-s3.proxy-protocol* | To define a proxy protocol when instantiating the S3 client |  | Protocol
| *camel.component.aws2-s3.region* | The region in which S3 client needs to work. When using this parameter, the configuration will expect the lowercase name of the region (for example ap-east-1) You'll need to use the name Region.EU_WEST_1.id() |  | String
| *camel.component.aws2-s3.restarting-policy* | The restarting policy to use in streaming upload mode |  | AWSS3RestartingPolicyEnum
| *camel.component.aws2-s3.secret-key* | Amazon AWS Secret Key |  | String
| *camel.component.aws2-s3.storage-class* | The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request. |  | String
| *camel.component.aws2-s3.streaming-upload-mode* | When stream mode is true the upload to bucket will be done in streaming | false | Boolean
| *camel.component.aws2-s3.streaming-upload-timeout* | While streaming upload mode is true, this option set the timeout to complete upload |  | Long
| *camel.component.aws2-s3.trust-all-certificates* | If we want to trust all certificates in case of overriding the endpoint | false | Boolean
| *camel.component.aws2-s3.uri-endpoint-override* | Set the overriding uri endpoint. This option needs to be used in combination with overrideEndpoint option |  | String
| *camel.component.aws2-s3.use-aws-k-m-s* | Define if KMS must be used or not | false | Boolean
| *camel.component.aws2-s3.use-customer-key* | Define if Customer Key must be used or not | false | Boolean
| *camel.component.aws2-s3.use-default-credentials-provider* | Set whether the S3 client should expect to load credentials through a default credentials provider or to expect static credentials to be passed in. | false | Boolean
|===
// spring-boot-auto-configure options: END
