![]() | Using cron expressions Configuring the cron _expression_ in Camel 1.x is based on path separators. We changed this to an URI option in Camel 2.0, allowing a more elegant configuration.
Also it is not possible to use the / cron special character (for increments) in Camel 1.x, which Camel 2.0 also fixes.
You may need to escape certain URI characters such as using ? in the quartz cron _expression_. |
URI format
quartz:quartz:quartz:quartz:quartz:
The component uses either a CronTrigger or a SimpleTrigger. If no cron _expression_ is provided, the component uses a simple trigger. If no groupName is provided, the quartz component uses the Camel group name.
You can append query options to the URI in the following format, ?option=value&option=value&...
Options
Parameter |
Default |
Description |
cron |
None |
Specifies a cron _expression_ (not compatible with the trigger.* or job.* options). |
trigger.repeatCount |
0 |
SimpleTrigger: How many times should the timer repeat? |
trigger.repeatInterval |
0 |
SimpleTrigger: The amount of time in milliseconds between repeated triggers. |
job.name |
null |
Sets the job name. |
job.XXX |
null |
Sets the job option with the XXX setter name. |
trigger.XXX |
null |
Sets the trigger option with the XXX setter name. |
stateful |
false |
Uses a Quartz StatefulJob instead of the default job. |
fireNow |
false |
New to Camel 2.2.0, if it is true will fire the trigger when the route is start when using SimpleTrigger. |
For example, the following routing rule will fire two timer events to the mock:results endpoint:
from("quartz://myGroup/myTimerName?trigger.repeatInterval=2&trigger.repeatCount=1").routeId("myRoute").to("mock:result");
When using a StatefulJob, the JobDataMap is re-persisted after every execution of the job, thus preserving state for the next execution.
Configuring quartz.properties file
By default Quartz will look for a quartz.properties file in the root of the classpath. If you are using WAR deployments this means just drop the quartz.properties in WEB-INF/classes.
However the Camel Quartz component also allows you to configure properties:
Parameter |
Default |
Type |
Description |
properties |
null |
Properties |
Camel 2.4: You can configure a java.util.Propoperties instance. |
propertiesFile |
null |
String |
Camel 2.4: File name of the properties to load from the classpath |
To do this you can configure this in Spring XML as follows
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
<property name="propertiesFile" value="com/mycompany/myquartz.properties"/>
</bean>
Starting the Quartz scheduler
Available as of Camel 2.4
The Quartz component offers an option to let the Quartz scheduler be started delayed, or not auto started at all.
Parameter |
Default |
Type |
Description |
startDelayedSeconds |
0 |
int |
Camel 2.4: Seconds to wait before starting the quartz scheduler. |
autoStartScheduler |
true |
boolean |
Camel 2.4: Whether or not the scheduler should be auto started. |
To do this you can configure this in Spring XML as follows
<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
<property name="startDelayedSeconds" value="5"/>
</bean>
Clustering
Available as of Camel 2.4
If you use Quartz in clustered mode, e.g. the JobStore is clustered. Then from Camel 2.4 onwards the Quartz component will not pause/remove triggers when a node is being stopped/shutdown. This allows the trigger to keep running on the other nodes in the cluster.
Note: When running in clustered node no checking is done to ensure unique job name/group for endpoints.
Message Headers
Camel adds the getters from the Quartz Execution Context as header values. The following headers are added:
calendar, fireTime, jobDetail, jobInstance, jobRuntTime, mergedJobDataMap, nextFireTime, previousFireTime, refireCount, result, scheduledFireTime, scheduler, trigger, triggerName, triggerGroup.
The fireTime header contains the java.util.Date of when the exchange was fired.
Using Cron Triggers
Avaiable as of Camel 2.0
Quartz supports Cron-like expressions for specifying timers in a handy format. You can use these expressions in the cron URI parameter; though to preserve valid URI encoding we allow + to be used instead of spaces. Quartz provides a little tutorial on how to use cron expressions.
For example, the following will fire a message every five minutes starting at 12pm (noon) to 6pm on weekdays:
from("quartz:).to("activemq:Totally.Rocks");
which is equivalent to using the cron _expression_
The following table shows the URI character encodings we use to preserve valid URI syntax:
URI Character |
Cron character |
+ |
Space |
Using Cron Triggers in Camel 1.x
@deprecated
Quartz supports Cron-like expressions for specifying timers in a handy format. You can use these expressions in the URI; though to preserve valid URI encoding we allow / to be used instead of spaces and $ to be used instead of ?.
For example, the following endpoint URI will fire a message at 12pm (noon) every day
from("quartz:).to("activemq:Totally.Rocks");
which is equivalent to using the cron _expression_
The following table shows the URI character encodings we use to preserve valid URI syntax:
URI Character |
Cron character |
/ |
Space |
$ |
? |
See Also