= Cron Component
:doctitle: Cron
:shortname: cron
:artifactid: camel-cron
:description: A generic interface for triggering events at times specified through the Unix cron syntax.
:since: 3.1
:supportlevel: Stable
:component-header: Only consumer is supported
//Manually maintained attributes
:camel-spring-boot-name: cron

*Since Camel {since}*

*{component-header}*

The Cron component is a generic interface component that allows triggering events at specific time interval
specified using the Unix cron syntax (e.g. `0/2 * * * * ?` to trigger an event every two seconds).

Being an interface component, the Cron component does not contain a default implementation, instead it requires that the users plug
the implementation of their choice.

The following standard Camel components support the Cron endpoints:

- Camel-quartz
- Camel-spring

The Cron component is also supported in **Camel K**, which can use the Kubernetes scheduler to trigger the routes when required by the cron expression.
Camel K does not require additional libraries to be plugged when using cron expressions compatible with Kubernetes cron syntax.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cron</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

Additional libraries may be needed in order to plug a specific implementation.


// component-configure options: START

// component-configure options: END

// component options: START
include::partial$component-configure-options.adoc[]
include::partial$component-endpoint-options.adoc[]
// component options: END

// endpoint options: START

// endpoint options: END

== Usage

The component can be used to trigger events at specified times, as in the following example:

[source,java]
---------------------------------------------------------
from("cron:tab?schedule=0/1+*+*+*+*+?")
.setBody().constant("event")
.log("${body}");
---------------------------------------------------------

The schedule expression `0/3{plus}10{plus}*{plus}*{plus}*{plus}?` can be also written as `0/3 10 * * * ?` and triggers an event every three seconds only in the tenth minute of each hour.

Parts in the schedule expression means (in order):

- Seconds (optional)
- Minutes
- Hours
- Day of month
- Month
- Day of week
- Year (optional)

Schedule expressions can be made of 5 to 7 parts. When expressions are composed of 6 parts, the first items is the "seconds" part (and year is considered missing).

Other valid examples of schedule expressions are:

- `0/2 * * * ?` (5 parts, an event every two minutes)
- `0 0/2 * * * MON-FRI 2030` (7 parts, an event every two minutes only in year 2030)

Routes can also be written using the XML DSL.

[source,xml]
-------------
<route>
    <from uri="cron:tab?schedule=0/1+*+*+*+*+?"/>
    <setBody>
      <constant>event</constant>
    </setBody>
    <to uri="log:info"/>
</route>
-------------


include::spring-boot:partial$starter.adoc[]
