The simple scheduled route policy is a route policy that enables you to start, stop, suspend, and resume routes, where the timing of these events is defined by providing the time and date of an initial event and (optionally) by specifying a certain number of subsequent repititions. To define a simple scheduled route policy, create an instance of the following class:
org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy
The simple scheduled route policy depends on the Quartz component,
camel-quartz
. For example, if you are using Maven as your build system, you
would need to add a dependency on the camel-quartz
artifact.
Example 2.5 shows how to schedule a
route to start up using the Java DSL. The initial start time, startTime
, is
defined to be 3 seconds after the current time. The policy is also configured to start the
route a second time, 3 seconds after the initial start time, which is
configured by setting routeStartRepeatCount
to 1 and
routeStartRepeatInterval
to 3000 milliseconds.
In Java DSL, you attach the route policy to the route by calling the
routePolicy()
DSL command in the route.
Example 2.5. Java DSL Example of Simple Scheduled Route
// Java
SimpleScheduledRoutePolicy policy = new SimpleScheduledRoutePolicy();
long startTime = System.currentTimeMillis() + 3000L;
policy.setRouteStartDate(new Date(startTime));
policy.setRouteStartRepeatCount(1);
policy.setRouteStartRepeatInterval(3000);
from("direct:start")
.routeId("test")
.routePolicy(policy)
.to("mock:success");
Note | |
---|---|
You can specify multiple policies on the route by calling |
Example 2.6 shows how to schedule a route to start up using the XML DSL.
In XML DSL, you attach the route policy to the route by setting the
routePolicyRef
attribute on the route
element.
Example 2.6. XML DSL Example of Simple Scheduled Route
<bean id="date" class="java.util.Data"/>
<bean id="startPolicy" class="org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy">
<property name="routeStartDate" ref="date"/>
<property name="routeStartRepeatCount" value="1"/>
<property name="routeStartRepeatInterval" value="3000"/>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/spring">
<route id="myroute" routePolicyRef="startPolicy">
<from uri="direct:start"/>
<to uri="mock:success"/>
</route>
</camelContext>
Note | |
---|---|
You can specify multiple policies on the route by setting the value of
|
The initial times of the triggers used in the simple scheduled route policy are
specified using the java.util.Date
type.The most flexible way to define a
Date
instance is through the java.util.GregorianCalendar class. Use the convenient constructors and methods
of the GregorianCalendar
class to define a date and then obtain a
Date
instance by calling GregorianCalendar.getTime()
.
For example, to define the time and date for January 1, 2011 at noon, call a
GregorianCalendar
constructor as follows:
// Java import java.util.GregorianCalendar; import java.util.Calendar; ... GregorianCalendar gc = new GregorianCalendar( 2011, Calendar.JANUARY, 1, 12, // hourOfDay 0, // minutes 0 // seconds ); java.util.Date triggerDate = gc.getTime();
The GregorianCalendar
class also supports the definition of times in
different time zones. By default, it uses the local time zone on your computer.
When you configure a simple scheduled route policy to stop a route, the route stopping algorithm is automatically integrated with the graceful shutdown procedure (see Controlling Start-Up and Shutdown of Routes). This means that the task waits until the current exchange has finished processing before shutting down the route. You can set a timeout, however, that forces the route to stop after the specified time, irrespective of whether or not the route has finished processing the exchange.
You can use a simple scheduled route policy to define one or more of the following scheduling tasks:
The following table lists the parameters for scheduling one or more route starts.
Parameter | Type | Default | Description |
---|---|---|---|
routeStartDate | java.util.Date | None | Specifies the date and time when the route is started for the first time. |
routeStartRepeatCount | int | 0 | When set to a non-zero value, specifies how many times the route should be started. |
routeStartRepeatInterval | long | 0 | Specifies the time interval between starts, in units of milliseconds. |
The following table lists the parameters for scheduling one or more route stops.
Parameter | Type | Default | Description |
---|---|---|---|
routeStopDate | java.util.Date | None | Specifies the date and time when the route is stopped for the first time. |
routeStopRepeatCount | int | 0 | When set to a non-zero value, specifies how many times the route should be stopped. |
routeStopRepeatInterval | long | 0 | Specifies the time interval between stops, in units of milliseconds. |
routeStopGracePeriod | int | 10000 | Specifies how long to wait for the current exchange to finish processing (grace period) before forcibly stopping the route. Set to 0 for an infinite grace period. |
routeStopTimeUnit | long | TimeUnit.MILLISECONDS | Specifies the time unit of the grace period. |
The following table lists the parameters for scheduling the suspension of a route one or more times.
Parameter | Type | Default | Description |
---|---|---|---|
routeSuspendDate | java.util.Date | None | Specifies the date and time when the route is suspended for the first time. |
routeSuspendRepeatCount | int | 0 | When set to a non-zero value, specifies how many times the route should be suspended. |
routeSuspendRepeatInterval | long | 0 | Specifies the time interval between suspends, in units of milliseconds. |
The following table lists the parameters for scheduling the resumption of a route one or more times.
Parameter | Type | Default | Description |
---|---|---|---|
routeResumeDate | java.util.Date | None | Specifies the date and time when the route is resumed for the first time. |
routeResumeRepeatCount | int | 0 | When set to a non-zero value, specifies how many times the route should be resumed. |
routeResumeRepeatInterval | long | 0 | Specifies the time interval between resumes, in units of milliseconds. |