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

== Spring Boot Auto-Configuration

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


The component supports 49 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.servicenow.api-url* | The ServiceNow REST API url |  | String
| *camel.component.servicenow.api-version* | The ServiceNow REST API version, default latest |  | String
| *camel.component.servicenow.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.servicenow.configuration* | Component configuration. The option is a org.apache.camel.component.servicenow.ServiceNowConfiguration type. |  | ServiceNowConfiguration
| *camel.component.servicenow.date-format* | The date format used for Json serialization/deserialization | yyyy-MM-dd | String
| *camel.component.servicenow.date-time-format* | The date-time format used for Json serialization/deserialization | yyyy-MM-dd HH:mm:ss | String
| *camel.component.servicenow.display* | Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this parameter to all to return scorecards with any Display field value. This parameter is true by default. | true | String
| *camel.component.servicenow.display-value* | Return the display value (true), actual value (false), or both (all) for reference fields (default: false) | false | String
| *camel.component.servicenow.enabled* | Whether to enable auto configuration of the servicenow component. This is enabled by default. |  | Boolean
| *camel.component.servicenow.exclude-reference-link* | True to exclude Table API links for reference fields (default: false) |  | Boolean
| *camel.component.servicenow.favorites* | Set this parameter to true to return only scorecards that are favorites of the querying user. |  | Boolean
| *camel.component.servicenow.http-client-policy* | To configure http-client. The option is a org.apache.cxf.transports.http.configuration.HTTPClientPolicy type. |  | HTTPClientPolicy
| *camel.component.servicenow.include-aggregates* | Set this parameter to true to always return all available aggregates for an indicator, including when an aggregate has already been applied. If a value is not specified, this parameter defaults to false and returns no aggregates. |  | Boolean
| *camel.component.servicenow.include-available-aggregates* | Set this parameter to true to return all available aggregates for an indicator when no aggregate has been applied. If a value is not specified, this parameter defaults to false and returns no aggregates. |  | Boolean
| *camel.component.servicenow.include-available-breakdowns* | Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified, this parameter defaults to false and returns no breakdowns. |  | Boolean
| *camel.component.servicenow.include-score-notes* | Set this parameter to true to return all notes associated with the score. The note element contains the note text as well as the author and timestamp when the note was added. |  | Boolean
| *camel.component.servicenow.include-scores* | Set this parameter to true to return all scores for a scorecard. If a value is not specified, this parameter defaults to false and returns only the most recent score value. |  | Boolean
| *camel.component.servicenow.input-display-value* | True to set raw value of input fields (default: false) |  | Boolean
| *camel.component.servicenow.instance-name* | The ServiceNow instance name |  | String
| *camel.component.servicenow.key* | Set this parameter to true to return only scorecards for key indicators. |  | Boolean
| *camel.component.servicenow.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.servicenow.mapper* | Sets Jackson's ObjectMapper to use for request/reply. The option is a com.fasterxml.jackson.databind.ObjectMapper type. |  | ObjectMapper
| *camel.component.servicenow.models* | Defines both request and response models |  | Map
| *camel.component.servicenow.oauth-client-id* | OAuth2 ClientID |  | String
| *camel.component.servicenow.oauth-client-secret* | OAuth2 ClientSecret |  | String
| *camel.component.servicenow.oauth-token-url* | OAuth token Url |  | String
| *camel.component.servicenow.password* | ServiceNow account password, MUST be provided |  | String
| *camel.component.servicenow.per-page* | Enter the maximum number of scorecards each query can return. By default this value is 10, and the maximum is 100. | 10 | Integer
| *camel.component.servicenow.proxy-authorization-policy* | To configure proxy authentication. The option is a org.apache.cxf.configuration.security.ProxyAuthorizationPolicy type. |  | ProxyAuthorizationPolicy
| *camel.component.servicenow.proxy-host* | The proxy host name |  | String
| *camel.component.servicenow.proxy-password* | Password for proxy authentication |  | String
| *camel.component.servicenow.proxy-port* | The proxy port number |  | Integer
| *camel.component.servicenow.proxy-user-name* | Username for proxy authentication |  | String
| *camel.component.servicenow.release* | The ServiceNow release to target, default to Helsinki See \https://docs.servicenow.com |  | ServiceNowRelease
| *camel.component.servicenow.request-models* | Defines the request model |  | Map
| *camel.component.servicenow.resource* | The default resource, can be overridden by header CamelServiceNowResource |  | String
| *camel.component.servicenow.response-models* | Defines the response model |  | Map
| *camel.component.servicenow.retrieve-target-record-on-import* | Set this parameter to true to retrieve the target record when using import set api. The import set result is then replaced by the target record | false | Boolean
| *camel.component.servicenow.sort-by* | Specify the value to use when sorting results. By default, queries sort records by value. |  | String
| *camel.component.servicenow.sort-dir* | Specify the sort direction, ascending or descending. By default, queries sort records in descending order. Use sysparm_sortdir=asc to sort in ascending order. |  | String
| *camel.component.servicenow.ssl-context-parameters* | To configure security using SSLContextParameters. See \http://camel.apache.org/camel-configuration-utilities.html. The option is a org.apache.camel.support.jsse.SSLContextParameters type. |  | SSLContextParameters
| *camel.component.servicenow.suppress-auto-sys-field* | True to suppress auto generation of system fields (default: false) |  | Boolean
| *camel.component.servicenow.suppress-pagination-header* | Set this value to true to remove the Link header from the response. The Link header allows you to request additional pages of data when the number of records matching your query exceeds the query limit |  | Boolean
| *camel.component.servicenow.table* | The default table, can be overridden by header CamelServiceNowTable |  | String
| *camel.component.servicenow.target* | Set this parameter to true to return only scorecards that have a target. |  | Boolean
| *camel.component.servicenow.time-format* | The time format used for Json serialization/deserialization | HH:mm:ss | String
| *camel.component.servicenow.top-level-only* | Gets only those categories whose parent is a catalog. |  | Boolean
| *camel.component.servicenow.use-global-ssl-context-parameters* | Enable usage of global SSL context parameters. | false | Boolean
| *camel.component.servicenow.user-name* | ServiceNow user account name, MUST be provided |  | String
|===
// spring-boot-auto-configure options: END
