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

== Spring Boot Auto-Configuration

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


The component supports 9 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.webhook.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.webhook.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.webhook.configuration* | Set the default configuration for the webhook meta-component. The option is a org.apache.camel.component.webhook.WebhookConfiguration type. |  | WebhookConfiguration
| *camel.component.webhook.enabled* | Whether to enable auto configuration of the webhook component. This is enabled by default. |  | Boolean
| *camel.component.webhook.webhook-auto-register* | Automatically register the webhook at startup and unregister it on shutdown. | true | Boolean
| *camel.component.webhook.webhook-base-path* | The first (base) path element where the webhook will be exposed. It's a good practice to set it to a random string, so that it cannot be guessed by unauthorized parties. |  | String
| *camel.component.webhook.webhook-component-name* | The Camel Rest component to use for the REST transport, such as netty-http. |  | String
| *camel.component.webhook.webhook-external-url* | The URL of the current service as seen by the webhook provider |  | String
| *camel.component.webhook.webhook-path* | The path where the webhook endpoint will be exposed (relative to basePath, if any) |  | String
|===
// spring-boot-auto-configure options: END
