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

== Spring Boot Auto-Configuration

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


The component supports 147 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.cloud.consul.service-discovery.acl-token* | Sets the ACL token to be used with Consul |  | String
| *camel.cloud.consul.service-discovery.block-seconds* | The seconds to wait for a watch event, default 10 seconds | 10 | Integer
| *camel.cloud.consul.service-discovery.configurations* | Define additional configuration definitions |  | Map
| *camel.cloud.consul.service-discovery.connect-timeout-millis* | Connect timeout for OkHttpClient |  | Long
| *camel.cloud.consul.service-discovery.datacenter* | The data center |  | String
| *camel.cloud.consul.service-discovery.enabled* | Enable the component | true | Boolean
| *camel.cloud.consul.service-discovery.password* | Sets the password to be used for basic authentication |  | String
| *camel.cloud.consul.service-discovery.properties* | Set client properties to use. These properties are specific to what service call implementation are in use. For example if using ribbon, then the client properties are define in com.netflix.client.config.CommonClientConfigKey. |  | Map
| *camel.cloud.consul.service-discovery.read-timeout-millis* | Read timeout for OkHttpClient |  | Long
| *camel.cloud.consul.service-discovery.url* | The Consul agent URL |  | String
| *camel.cloud.consul.service-discovery.user-name* | Sets the username to be used for basic authentication |  | String
| *camel.cloud.consul.service-discovery.write-timeout-millis* | Write timeout for OkHttpClient |  | Long
| *camel.cloud.dns.service-discovery.configurations* | Define additional configuration definitions |  | Map
| *camel.cloud.dns.service-discovery.domain* | The domain name; |  | String
| *camel.cloud.dns.service-discovery.enabled* | Enable the component | true | Boolean
| *camel.cloud.dns.service-discovery.properties* | Set client properties to use. These properties are specific to what service call implementation are in use. For example if using ribbon, then the client properties are define in com.netflix.client.config.CommonClientConfigKey. |  | Map
| *camel.cloud.dns.service-discovery.proto* | The transport protocol of the desired service. | _tcp | String
| *camel.cloud.etcd.service-discovery.configurations* | Define additional configuration definitions |  | Map
| *camel.cloud.etcd.service-discovery.enabled* | Enable the component | true | Boolean
| *camel.cloud.etcd.service-discovery.password* | The password to use for basic authentication. |  | String
| *camel.cloud.etcd.service-discovery.properties* | Set client properties to use. These properties are specific to what service call implementation are in use. For example if using ribbon, then the client properties are define in com.netflix.client.config.CommonClientConfigKey. |  | Map
| *camel.cloud.etcd.service-discovery.service-path* | The path to look for for service discovery | /services/ | String
| *camel.cloud.etcd.service-discovery.timeout* | To set the maximum time an action could take to complete. |  | Long
| *camel.cloud.etcd.service-discovery.type* | To set the discovery type, valid values are on-demand and watch. | on-demand | String
| *camel.cloud.etcd.service-discovery.uris* | The URIs the client can connect to. |  | String
| *camel.cloud.etcd.service-discovery.user-name* | The user name to use for basic authentication. |  | String
| *camel.cloud.kubernetes.service-discovery.api-version* | Sets the API version when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.ca-cert-data* | Sets the Certificate Authority data when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.ca-cert-file* | Sets the Certificate Authority data that are loaded from the file when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.client-cert-data* | Sets the Client Certificate data when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.client-cert-file* | Sets the Client Certificate data that are loaded from the file when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.client-key-algo* | Sets the Client Keystore algorithm, such as RSA when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.client-key-data* | Sets the Client Keystore data when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.client-key-file* | Sets the Client Keystore data that are loaded from the file when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.client-key-passphrase* | Sets the Client Keystore passphrase when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.configurations* | Define additional configuration definitions |  | Map
| *camel.cloud.kubernetes.service-discovery.dns-domain* | Sets the DNS domain to use for DNS lookup. |  | String
| *camel.cloud.kubernetes.service-discovery.enabled* | Enable the component | true | Boolean
| *camel.cloud.kubernetes.service-discovery.lookup* | How to perform service lookup. Possible values: client, dns, environment. When using client, then the client queries the kubernetes master to obtain a list of active pods that provides the service, and then random (or round robin) select a pod. When using dns the service name is resolved as name.namespace.svc.dnsDomain. When using dnssrv the service name is resolved with SRV query for _._...svc... When using environment then environment variables are used to lookup the service. By default environment is used. | environment | String
| *camel.cloud.kubernetes.service-discovery.master-url* | Sets the URL to the master when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.namespace* | Sets the namespace to use. Will by default use namespace from the ENV variable KUBERNETES_MASTER. |  | String
| *camel.cloud.kubernetes.service-discovery.oauth-token* | Sets the OAUTH token for authentication (instead of username/password) when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.password* | Sets the password for authentication when using client lookup |  | String
| *camel.cloud.kubernetes.service-discovery.port-name* | Sets the Port Name to use for DNS/DNSSRV lookup. |  | String
| *camel.cloud.kubernetes.service-discovery.port-protocol* | Sets the Port Protocol to use for DNS/DNSSRV lookup. |  | String
| *camel.cloud.kubernetes.service-discovery.properties* | Set client properties to use. These properties are specific to what service call implementation are in use. For example if using ribbon, then the client properties are define in com.netflix.client.config.CommonClientConfigKey. |  | Map
| *camel.cloud.kubernetes.service-discovery.trust-certs* | Sets whether to turn on trust certificate check when using client lookup | false | Boolean
| *camel.cloud.kubernetes.service-discovery.username* | Sets the username for authentication when using client lookup |  | String
| *camel.cloud.ribbon.load-balancer.client-name* | Sets the Ribbon client name |  | String
| *camel.cloud.ribbon.load-balancer.configurations* | Define additional configuration definitions |  | Map
| *camel.cloud.ribbon.load-balancer.enabled* | Enable the component | true | Boolean
| *camel.cloud.ribbon.load-balancer.namespace* | The namespace |  | String
| *camel.cloud.ribbon.load-balancer.password* | The password |  | String
| *camel.cloud.ribbon.load-balancer.properties* | Set client properties to use. These properties are specific to what service call implementation are in use. For example if using ribbon, then the client properties are define in com.netflix.client.config.CommonClientConfigKey. |  | Map
| *camel.cloud.ribbon.load-balancer.username* | The username |  | String
| *camel.hystrix.allow-maximum-size-to-diverge-from-core-size* | Allows the configuration for maximumSize to take effect. That value can then be equal to, or higher, than coreSize | false | Boolean
| *camel.hystrix.circuit-breaker-enabled* | Whether to use a HystrixCircuitBreaker or not. If false no circuit-breaker logic will be used and all requests permitted. This is similar in effect to circuitBreakerForceClosed() except that continues tracking metrics and knowing whether it should be open/closed, this property results in not even instantiating a circuit-breaker. | true | Boolean
| *camel.hystrix.circuit-breaker-error-threshold-percentage* | Error percentage threshold (as whole number such as 50) at which point the circuit breaker will trip open and reject requests. It will stay tripped for the duration defined in circuitBreakerSleepWindowInMilliseconds; The error percentage this is compared against comes from HystrixCommandMetrics.getHealthCounts(). | 50 | Integer
| *camel.hystrix.circuit-breaker-force-closed* | If true the HystrixCircuitBreaker#allowRequest() will always return true to allow requests regardless of the error percentage from HystrixCommandMetrics.getHealthCounts(). The circuitBreakerForceOpen() property takes precedence so if it set to true this property does nothing. | false | Boolean
| *camel.hystrix.circuit-breaker-force-open* | If true the HystrixCircuitBreaker.allowRequest() will always return false, causing the circuit to be open (tripped) and reject all requests. This property takes precedence over circuitBreakerForceClosed(); | false | Boolean
| *camel.hystrix.circuit-breaker-request-volume-threshold* | Minimum number of requests in the metricsRollingStatisticalWindowInMilliseconds() that must exist before the HystrixCircuitBreaker will trip. If below this number the circuit will not trip regardless of error percentage. | 20 | Integer
| *camel.hystrix.circuit-breaker-sleep-window-in-milliseconds* | The time in milliseconds after a HystrixCircuitBreaker trips open that it should wait before trying requests again. | 5000 | Integer
| *camel.hystrix.configurations* | Define additional configuration definitions |  | Map
| *camel.hystrix.core-pool-size* | Core thread-pool size that gets passed to java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) | 10 | Integer
| *camel.hystrix.enabled* | Enable the component | true | Boolean
| *camel.hystrix.execution-isolation-semaphore-max-concurrent-requests* | Number of concurrent requests permitted to HystrixCommand.run(). Requests beyond the concurrent limit will be rejected. Applicable only when executionIsolationStrategy == SEMAPHORE. | 20 | Integer
| *camel.hystrix.execution-isolation-strategy* | What isolation strategy HystrixCommand.run() will be executed with. If THREAD then it will be executed on a separate thread and concurrent requests limited by the number of threads in the thread-pool. If SEMAPHORE then it will be executed on the calling thread and concurrent requests limited by the semaphore count. | THREAD | String
| *camel.hystrix.execution-isolation-thread-interrupt-on-timeout* | Whether the execution thread should attempt an interrupt (using Future#cancel ) when a thread times out. Applicable only when executionIsolationStrategy() == THREAD. | true | Boolean
| *camel.hystrix.execution-timeout-enabled* | Whether the timeout mechanism is enabled for this command | true | Boolean
| *camel.hystrix.execution-timeout-in-milliseconds* | Time in milliseconds at which point the command will timeout and halt execution. If executionIsolationThreadInterruptOnTimeout == true and the command is thread-isolated, the executing thread will be interrupted. If the command is semaphore-isolated and a HystrixObservableCommand, that command will get unsubscribed. | 1000 | Integer
| *camel.hystrix.fallback-enabled* | Whether HystrixCommand.getFallback() should be attempted when failure occurs. | true | Boolean
| *camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests* | Number of concurrent requests permitted to HystrixCommand.getFallback(). Requests beyond the concurrent limit will fail-fast and not attempt retrieving a fallback. | 10 | Integer
| *camel.hystrix.group-key* | Sets the group key to use. The default value is CamelHystrix. | CamelHystrix | String
| *camel.hystrix.keep-alive-time* | Keep-alive time in minutes that gets passed to ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) | 1 | Integer
| *camel.hystrix.max-queue-size* | Max queue size that gets passed to BlockingQueue in HystrixConcurrencyStrategy.getBlockingQueue(int) This should only affect the instantiation of a threadpool - it is not eliglible to change a queue size on the fly. For that, use queueSizeRejectionThreshold(). | -1 | Integer
| *camel.hystrix.maximum-size* | Maximum thread-pool size that gets passed to ThreadPoolExecutor#setMaximumPoolSize(int) . This is the maximum amount of concurrency that can be supported without starting to reject HystrixCommands. Please note that this setting only takes effect if you also set allowMaximumSizeToDivergeFromCoreSize | 10 | Integer
| *camel.hystrix.metrics-health-snapshot-interval-in-milliseconds* | Time in milliseconds to wait between allowing health snapshots to be taken that calculate success and error percentages and affect HystrixCircuitBreaker.isOpen() status. On high-volume circuits the continual calculation of error percentage can become CPU intensive thus this controls how often it is calculated. | 500 | Integer
| *camel.hystrix.metrics-rolling-percentile-bucket-size* | Maximum number of values stored in each bucket of the rolling percentile. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10 | Integer
| *camel.hystrix.metrics-rolling-percentile-enabled* | Whether percentile metrics should be captured using HystrixRollingPercentile inside HystrixCommandMetrics. | true | Boolean
| *camel.hystrix.metrics-rolling-percentile-window-buckets* | Number of buckets the rolling percentile window is broken into. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 6 | Integer
| *camel.hystrix.metrics-rolling-percentile-window-in-milliseconds* | Duration of percentile rolling window in milliseconds. This is passed into HystrixRollingPercentile inside HystrixCommandMetrics. | 10000 | Integer
| *camel.hystrix.metrics-rolling-statistical-window-buckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside HystrixCommandMetrics. | 10 | Integer
| *camel.hystrix.metrics-rolling-statistical-window-in-milliseconds* | This property sets the duration of the statistical rolling window, in milliseconds. This is how long metrics are kept for the thread pool. The window is divided into buckets and rolls by those increments. | 10000 | Integer
| *camel.hystrix.queue-size-rejection-threshold* | Queue size rejection threshold is an artificial max size at which rejections will occur even if maxQueueSize has not been reached. This is done because the maxQueueSize of a BlockingQueue can not be dynamically changed and we want to support dynamically changing the queue size that affects rejections. This is used by HystrixCommand when queuing a thread for execution. | 5 | Integer
| *camel.hystrix.request-log-enabled* | Whether HystrixCommand execution and events should be logged to HystrixRequestLog. | true | Boolean
| *camel.hystrix.thread-pool-key* | Sets the thread pool key to use. Will by default use the same value as groupKey has been configured to use. | CamelHystrix | String
| *camel.hystrix.thread-pool-rolling-number-statistical-window-buckets* | Number of buckets the rolling statistical window is broken into. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10 | Integer
| *camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds* | Duration of statistical rolling window in milliseconds. This is passed into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. | 10000 | Integer
| *camel.language.constant.enabled* | Whether to enable auto configuration of the constant language. This is enabled by default. |  | Boolean
| *camel.language.constant.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.csimple.enabled* | Whether to enable auto configuration of the csimple language. This is enabled by default. |  | Boolean
| *camel.language.csimple.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.exchangeproperty.enabled* | Whether to enable auto configuration of the exchangeProperty language. This is enabled by default. |  | Boolean
| *camel.language.exchangeproperty.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.file.enabled* | Whether to enable auto configuration of the file language. This is enabled by default. |  | Boolean
| *camel.language.file.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.header.enabled* | Whether to enable auto configuration of the header language. This is enabled by default. |  | Boolean
| *camel.language.header.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.ref.enabled* | Whether to enable auto configuration of the ref language. This is enabled by default. |  | Boolean
| *camel.language.ref.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.simple.enabled* | Whether to enable auto configuration of the simple language. This is enabled by default. |  | Boolean
| *camel.language.simple.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.language.tokenize.enabled* | Whether to enable auto configuration of the tokenize language. This is enabled by default. |  | Boolean
| *camel.language.tokenize.group-delimiter* | Sets the delimiter to use when grouping. If this has not been set then token will be used as the delimiter. |  | String
| *camel.language.tokenize.trim* | Whether to trim the value to remove leading and trailing whitespaces and line breaks | true | Boolean
| *camel.resilience4j.automatic-transition-from-open-to-half-open-enabled* | Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed. | false | Boolean
| *camel.resilience4j.circuit-breaker-ref* | Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry. When using this, then any other circuit breaker options are not in use. |  | String
| *camel.resilience4j.config-ref* | Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the registry. |  | String
| *camel.resilience4j.configurations* | Define additional configuration definitions |  | Map
| *camel.resilience4j.enabled* | Enable the component | true | Boolean
| *camel.resilience4j.failure-rate-threshold* | Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 50 percentage. |  | Float
| *camel.resilience4j.minimum-number-of-calls* | Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open even if all 9 calls have failed. Default minimumNumberOfCalls is 100 | 100 | Integer
| *camel.resilience4j.permitted-number-of-calls-in-half-open-state* | Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default size is 10. | 10 | Integer
| *camel.resilience4j.sliding-window-size* | Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. The slidingWindowSize must be greater than 0. The minimumNumberOfCalls must be greater than 0. If the slidingWindowType is COUNT_BASED, the minimumNumberOfCalls cannot be greater than slidingWindowSize . If the slidingWindowType is TIME_BASED, you can pick whatever you want. Default slidingWindowSize is 100. | 100 | Integer
| *camel.resilience4j.sliding-window-type* | Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COUNT_BASED. | COUNT_BASED | String
| *camel.resilience4j.slow-call-duration-threshold* | Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls percentage. Default value is 60 seconds. | 60 | Integer
| *camel.resilience4j.slow-call-rate-threshold* | Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than slowCallDurationThreshold Duration. When the percentage of slow calls is equal or greater the threshold, the CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not greater than 100. Default value is 100 percentage which means that all recorded calls must be slower than slowCallDurationThreshold. |  | Float
| *camel.resilience4j.wait-duration-in-open-state* | Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it switches to half open. Default value is 60 seconds. | 60 | Integer
| *camel.resilience4j.writable-stack-trace-enabled* | Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker is short-circuiting calls). | true | Boolean
| *camel.rest.api-component* | The name of the Camel component to use as the REST API (such as swagger) If no API Component has been explicit configured, then Camel will lookup if there is a Camel component responsible for servicing and generating the REST API documentation, or if a org.apache.camel.spi.RestApiProcessorFactory is registered in the registry. If either one is found, then that is being used. |  | String
| *camel.rest.api-context-id-pattern* | Sets an CamelContext id pattern to only allow Rest APIs from rest services within CamelContext's which name matches the pattern. The pattern #name# refers to the CamelContext name, to match on the current CamelContext only. For any other value, the pattern uses the rules from PatternHelper#matchPattern(String,String) |  | String
| *camel.rest.api-context-listing* | Sets whether listing of all available CamelContext's with REST services in the JVM is enabled. If enabled it allows to discover these contexts, if false then only the current CamelContext is in use. | false | Boolean
| *camel.rest.api-context-path* | Sets a leading API context-path the REST API services will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path. |  | String
| *camel.rest.api-context-route-id* | Sets the route id to use for the route that services the REST API. The route will by default use an auto assigned route id. |  | String
| *camel.rest.api-host* | To use an specific hostname for the API documentation (eg swagger) This can be used to override the generated host with this configured hostname |  | String
| *camel.rest.api-property* | Allows to configure as many additional properties for the api documentation (swagger). For example set property api.title to my cool stuff |  | Map
| *camel.rest.api-vendor-extension* | Whether vendor extension is enabled in the Rest APIs. If enabled then Camel will include additional information as vendor extension (eg keys starting with x-) such as route ids, class names etc. Not all 3rd party API gateways and tools supports vendor-extensions when importing your API docs. | false | Boolean
| *camel.rest.binding-mode* | Sets the binding mode to use. The default value is off |  | RestBindingMode
| *camel.rest.client-request-validation* | Whether to enable validation of the client request to check whether the Content-Type and Accept headers from the client is supported by the Rest-DSL configuration of its consumes/produces settings. This can be turned on, to enable this check. In case of validation error, then HTTP Status codes 415 or 406 is returned. The default value is false. | false | Boolean
| *camel.rest.component* | The Camel Rest component to use for the REST transport (consumer), such as netty-http, jetty, servlet, undertow. If no component has been explicit configured, then Camel will lookup if there is a Camel component that integrates with the Rest DSL, or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry. If either one is found, then that is being used. |  | String
| *camel.rest.component-property* | Allows to configure as many additional properties for the rest component in use. |  | Map
| *camel.rest.consumer-property* | Allows to configure as many additional properties for the rest consumer in use. |  | Map
| *camel.rest.context-path* | Sets a leading context-path the REST services will be using. This can be used when using components such as camel-servlet where the deployed web application is deployed using a context-path. Or for components such as camel-jetty or camel-netty-http that includes a HTTP server. |  | String
| *camel.rest.cors-headers* | Allows to configure custom CORS headers. |  | Map
| *camel.rest.data-format-property* | Allows to configure as many additional properties for the data formats in use. For example set property prettyPrint to true to have json outputted in pretty mode. The properties can be prefixed to denote the option is only for either JSON or XML and for either the IN or the OUT. The prefixes are: json.in. json.out. xml.in. xml.out. For example a key with value xml.out.mustBeJAXBElement is only for the XML data format for the outgoing. A key without a prefix is a common key for all situations. |  | Map
| *camel.rest.enable-cors* | Whether to enable CORS headers in the HTTP response. The default value is false. | false | Boolean
| *camel.rest.endpoint-property* | Allows to configure as many additional properties for the rest endpoint in use. |  | Map
| *camel.rest.host* | The hostname to use for exposing the REST service. |  | String
| *camel.rest.host-name-resolver* | If no hostname has been explicit configured, then this resolver is used to compute the hostname the REST service will be using. |  | RestHostNameResolver
| *camel.rest.json-data-format* | Name of specific json data format to use. By default json-jackson will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance. |  | String
| *camel.rest.port* | The port number to use for exposing the REST service. Notice if you use servlet component then the port number configured here does not apply, as the port number in use is the actual port number the servlet component is using. eg if using Apache Tomcat its the tomcat http port, if using Apache Karaf its the HTTP service in Karaf that uses port 8181 by default etc. Though in those situations setting the port number here, allows tooling and JMX to know the port number, so its recommended to set the port number to the number that the servlet engine uses. |  | String
| *camel.rest.producer-api-doc* | Sets the location of the api document (swagger api) the REST producer will use to validate the REST uri and query parameters are valid accordingly to the api document. This requires adding camel-swagger-java to the classpath, and any miss configuration will let Camel fail on startup and report the error(s). The location of the api document is loaded from classpath by default, but you can use file: or http: to refer to resources to load from file or http url. |  | String
| *camel.rest.producer-component* | Sets the name of the Camel component to use as the REST producer |  | String
| *camel.rest.scheme* | The scheme to use for exposing the REST service. Usually http or https is supported. The default value is http |  | String
| *camel.rest.skip-binding-on-error-code* | Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. | false | Boolean
| *camel.rest.use-x-forward-headers* | Whether to use X-Forward headers for Host and related setting. The default value is true. | true | Boolean
| *camel.rest.xml-data-format* | Name of specific XML data format to use. By default jaxb will be used. Important: This option is only for setting a custom name of the data format, not to refer to an existing data format instance. |  | String
|===
// spring-boot-auto-configure options: END
