[[scheduler-component]]
= Scheduler Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-scheduler/src/main/docs/scheduler-component.adoc
:docTitle: Scheduler
:artifactId: camel-scheduler
:description: Generate messages in specified intervals using java.util.concurrent.ScheduledExecutorService.
:since: 2.15
:supportLevel: Stable
:component-header: Only consumer is supported
:core:

*Since Camel {since}*

*{component-header}*

The Scheduler component is used to generate message exchanges when a
scheduler fires. This component is similar to the
 xref:timer-component.adoc[Timer] component, but it offers more functionality in
terms of scheduling. Also this component uses
JDK `ScheduledExecutorService`. Where as the timer uses a JDK `Timer`.

You can only consume events from this endpoint.

== URI format

[source]
----
scheduler:name[?options]
----

Where `name` is the name of the scheduler, which is created and shared
across endpoints. So if you use the same name for all your scheduler
endpoints, only one scheduler thread pool and thread will be used - but
you can configure the thread pool to allow more concurrent threads.

You can append query options to the URI in the following format,
`?option=value&option=value&...`

*Note:* The IN body of the generated exchange is `null`. So
`exchange.getIn().getBody()` returns `null`.

== Options

// component options: START
The Scheduler component supports 3 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *bridgeErrorHandler* (consumer) | 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
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *concurrentTasks* (scheduler) | Number of threads used by the scheduling thread pool. Is by default using a single thread | 1 | int
|===
// component options: END


// endpoint options: START
The Scheduler endpoint is configured using URI syntax:

----
scheduler:name
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *name* | *Required* The name of the scheduler |  | String
|===


=== Query Parameters (22 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *bridgeErrorHandler* (consumer) | 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
| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
| *concurrentTasks* (scheduler) | Number of threads used by the scheduling thread pool. Is by default using a single thread | 1 | int
| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. The value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. The value can be one of: none, spring, quartz | none | String
| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. The value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
|===
// endpoint options: END


== More information

This component is a scheduler
http://camel.apache.org/polling-consumer.html[Polling Consumer] where
you can find more information about the options above, and examples at
the http://camel.apache.org/polling-consumer.html[Polling
Consumer] page.

== Exchange Properties

When the timer is fired, it adds the following information as properties
to the `Exchange`:

[width="100%",cols="10%,10%,80%",options="header",]
|===
|Name |Type |Description

|`Exchange.TIMER_NAME` |`String` |The value of the `name` option.

|`Exchange.TIMER_FIRED_TIME` |`Date` |The time when the consumer fired.
|===

== Sample

To set up a route that generates an event every 60 seconds:

[source,java]
----
from("scheduler://foo?delay=60000").to("bean:myBean?method=someMethodName");
----

The above route will generate an event and then invoke the
`someMethodName` method on the bean called `myBean` in the
Registry such as JNDI or Spring.

And the route in Spring DSL:

[source,xml]
----
<route>
  <from uri="scheduler://foo?delay=60000"/>
  <to uri="bean:myBean?method=someMethodName"/>
</route>
----

== Forcing the scheduler to trigger immediately when completed

To let the scheduler trigger as soon as the previous task is complete,
you can set the option `greedy=true`. But beware then the scheduler will
keep firing all the time. So use this with caution.

== Forcing the scheduler to be idle

There can be use cases where you want the scheduler to trigger and be
greedy. But sometimes you want "tell the scheduler" that there was no
task to poll, so the scheduler can change into idle mode using the
backoff options. To do this you would need to set a property on the
exchange with the key `Exchange.SCHEDULER_POLLED_MESSAGES` to a boolean
value of false. This will cause the consumer to indicate that there was
no messages polled. 

The consumer will otherwise as by default return 1 message polled to the
scheduler, every time the consumer has completed processing the
exchange.


include::camel-spring-boot::page$scheduler-starter.adoc[]
