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

== Spring Boot Auto-Configuration

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


The component supports 20 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.box.access-token-cache* | Custom Access Token Cache for storing and retrieving access tokens. The option is a com.box.sdk.IAccessTokenCache type. |  | IAccessTokenCache
| *camel.component.box.authentication-type* | The type of authentication for connection. Types of Authentication: STANDARD_AUTHENTICATION - OAuth 2.0 (3-legged) SERVER_AUTHENTICATION - OAuth 2.0 with JSON Web Tokens | APP_USER_AUTHENTICATION | String
| *camel.component.box.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.box.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.box.client-id* | Box application client ID |  | String
| *camel.component.box.client-secret* | Box application client secret |  | String
| *camel.component.box.configuration* | To use the shared configuration. The option is a org.apache.camel.component.box.BoxConfiguration type. |  | BoxConfiguration
| *camel.component.box.enabled* | Whether to enable auto configuration of the box component. This is enabled by default. |  | Boolean
| *camel.component.box.encryption-algorithm* | The type of encryption algorithm for JWT. Supported Algorithms: RSA_SHA_256 RSA_SHA_384 RSA_SHA_512 |  | EncryptionAlgorithm
| *camel.component.box.enterprise-id* | The enterprise ID to use for an App Enterprise. |  | String
| *camel.component.box.http-params* | Custom HTTP params for settings like proxy host |  | Map
| *camel.component.box.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.box.max-cache-entries* | The maximum number of access tokens in cache. | 100 | Integer
| *camel.component.box.private-key-file* | The private key for generating the JWT signature. |  | String
| *camel.component.box.private-key-password* | The password for the private key. |  | String
| *camel.component.box.public-key-id* | The ID for public key for validating the JWT signature. |  | String
| *camel.component.box.ssl-context-parameters* | To configure security using SSLContextParameters. The option is a org.apache.camel.support.jsse.SSLContextParameters type. |  | SSLContextParameters
| *camel.component.box.user-id* | The user ID to use for an App User. |  | String
| *camel.component.box.user-name* | Box user name, MUST be provided |  | String
| *camel.component.box.user-password* | Box user password, MUST be provided if authSecureStorage is not set, or returns null on first call |  | String
|===
// spring-boot-auto-configure options: END
