= 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
:tabs-sync-option:
: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 a specific time interval
specified using the Unix cron syntax (e.g. `0/2 * * * * ?` to trigger an event every two seconds).

As 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:

- xref:components::quartz-component.adoc[Camel Quartz]
- xref:components::spring-summary.adoc[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 to plug a specific implementation.


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

== Usage

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


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

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

====

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.

Breaking down the parts in the schedule expression(in order):

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

Schedule expressions can be made of five to seven parts. When expressions are composed of six parts, the first items is the _Seconds_ part (and year is considered missing).

Other valid examples of schedule expressions are:

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

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