= SimpleScheduledRoutePolicy
~~~~~~~~~~~~~~~~~~~~~~~~~~

SimpleScheduledRoutePolicy is a
xref:scheduledroutepolicy.adoc[ScheduledRoutePolicy] that facilitates
route activation, de-activation, suspension and resumption of routes
based on a xref:components::quartz-component.adoc[Quartz] SimpleTrigger.

Maven users will need to add a `camel-quartz` dependency to their
`pom.xml` to avail this capability.

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

**Relationship to the [Quartz] component**

All Scheduled route policies share the scheduler created by the Quartz
component. In this way, scheduler, jobs and triggers can be managed in a
common and consistent way.

**Relationship to the [Quartz] component**

From Camel 2.12.2 onwards you can also make use of the
xref:components::quartz-component.adoc[Quartz] based implementation of this route policy.

== How it works

In order to use a SimpleScheduledRoutePolicy it is necessary to
instantiate an object of the type
`org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy`.

In order to perform a route operation at a given time the following
information must be provided.

* Starting a route

[width="100%",cols="25%,25%,25%,25%",options="header",]
|=======================================================================
|Parameter Name |Type |Default |Description
|routeStartDate |java.util.Date |  |the initial scheduled Date and time
for route start

|routeStartRepeatCount |int |  |no of times to repeat the job

|routeStartRepeatInterval |long |  |the time interval in milliseconds to
trigger the next attempt to start the route
|=======================================================================

* Stopping a route

[width="100%",cols="25%,25%,25%,25%",options="header",]
|=======================================================================
|Parameter Name |Type |Default |Description
|routeStopDate |java.util.Date |  |the initial scheduled Date and time
for route stop

|routeStopRepeatCount |int |  |no of times to repeat the job

|routeStopRepeatInterval |long |  |the time interval in milliseconds to
trigger the next attempt to stop the route

|routeStopGracePeriod |int |10 seconds |the time period to wait before
initiating graceful route stop

|routeStopTimeUnit |long |TimeUnit.MILLISECONDS |the time unit for the
grace period expressed as java.util.concurrent.TimeUnit
|=======================================================================

* Suspending a route

[width="100%",cols="25%,25%,25%,25%",options="header",]
|=======================================================================
|Parameter Name |Type |Default |Description
|routeSuspendDate |java.util.Date |  |the initial scheduled Date and
time for route suspension

|routeSuspendRepeatCount |int |  |no of times to repeat the job

|routeSuspendRepeatInterval |long |  |the time interval in milliseconds
to trigger the next attempt to suspend the route
|=======================================================================

* Resuming a route

[width="100%",cols="25%,25%,25%,25%",options="header",]
|=======================================================================
|Parameter Name |Type |Default |Description
|routeResumeDate |java.util.Date |  |the initial scheduled Date and time
for route start

|routeResumeRepeatCount |int |  |no of times to repeat the job

|routeResumeRepeatInterval |long |  |the time interval in milliseconds
to trigger the next attempt to resume the route
|=======================================================================

Once the
`org.apache.camel.routepolicy.quartz.SimpleScheduledRoutePolicy` is
created it can be wired into the camel route as follows

== Configuring the policy

* In Java

[source,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");
----

* Using Spring

[source,xml]
----
<bean id="date" class="org.apache.camel.routepolicy.quartz.SimpleDate"/>

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

