title: How to Get Spring Quartz Trigger to Fire Using Scheduler
body: <p>I have never used a quartz scheduler before and I am having trouble creating a Quartz Job. The trigger I have configured via a <code>cronExpression</code> does not fire and I do not see what I am missing. </p>
  
  <p>Thanks in advance for any help or advice!</p>
  
  <p>I am using:</p>
  
  <ul>
  <li><p>quartz version 1.6.3</p></li>
  <li><p>spring version 3.1.1</p></li>
  </ul>
  
  <p>Scheduler:</p>
  
  <pre><code>&lt;beans default-autowire="byName"
      xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:aop="http://www.springframework.org/schema/aop"  
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
          http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
          http://www.springframework.org/schema/tx
          http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
          http://www.springframework.org/schema/aop
          http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context-3.1.xsd"&gt;
  
      &lt;!-- Quartz Scheduler --&gt;
      &lt;bean id="scheduler"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt;
          &lt;property name="dataSource" ref="itc5DataSource" /&gt;
          &lt;property name="applicationContextSchedulerContextKey" value="applicationContext" /&gt;
          &lt;property name="quartzProperties"&gt;
              &lt;props&gt;
                  &lt;prop key="org.quartz.scheduler.instanceName"&gt;${cepis.portal.scheduler.name}&lt;/prop&gt;
                  &lt;prop key="org.quartz.scheduler.instanceId"&gt;${cepis.portal.scheduler.instanceId}&lt;/prop&gt;
                  &lt;prop key="org.quartz.threadPool.class"&gt;${cepis.portal.scheduler.threadPool.class}&lt;/prop&gt;
                  &lt;prop key="org.quartz.threadPool.threadCount"&gt;${cepis.portal.scheduler.threadPool.threadCount}
                  &lt;/prop&gt;
                  &lt;prop key="org.quartz.jobStore.class"&gt;${cepis.portal.scheduler.jobStore.class}&lt;/prop&gt;
                  &lt;prop key="org.quartz.jobStore.isClustered"&gt;${cepis.portal.scheduler.jobStore.isClustered}&lt;/prop&gt;
                  &lt;prop key="org.quartz.jobStore.useProperties"&gt;${cepis.portal.scheduler.jobStore.useProperties}
                  &lt;/prop&gt;
                  &lt;prop key="org.quartz.jobStore.tablePrefix"&gt;${cepis.portal.scheduler.jobStore.tablePrefix}&lt;/prop&gt;
                  &lt;prop key="org.quartz.jobStore.driverDelegateClass"&gt;${cepis.portal.scheduler.jobStore.driverDelegateClass}
                  &lt;/prop&gt;
                  &lt;prop key="org.quartz.jobStore.selectWithLockSQL"&gt;${cepis.portal.scheduler.jobStore.selectWithLockSQL}
                  &lt;/prop&gt;
              &lt;/props&gt;
          &lt;/property&gt;
  
          &lt;property name="jobDetails"&gt;
              &lt;list&gt;
                  &lt;ref bean="updateNoShowAppointmentJob" /&gt;           
              &lt;/list&gt;
          &lt;/property&gt;
  
          &lt;property name="triggers"&gt;
              &lt;list&gt;
                  &lt;ref bean="updateNoShowTrigger" /&gt;          
              &lt;/list&gt;
          &lt;/property&gt;
  
      &lt;/bean&gt;
  
      &lt;!-- *************************************************************************************************  --&gt;
  
      &lt;bean id="updateNoShowAppointmentJob" class="org.springframework.scheduling.quartz.JobDetailBean"&gt;
          &lt;property name="name" value="CEPIS-UpdateNoShows" /&gt;
          &lt;property name="group" value="Appointments" /&gt;              
          &lt;property name="jobClass" value="edu.uky.cepis.util.cron.job.UpdateNoShowAppointmentJob" /&gt;
      &lt;/bean&gt;
  
  
      &lt;!-- *************************************************************************************************  --&gt; 
  
      &lt;bean id="updateNoShowTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"&gt;
          &lt;property name="name" value="UpdateNoShow" /&gt;
          &lt;property name="group" value="Appointments" /&gt;
          &lt;property name="jobDetail" ref="updateNoShowAppointmentJob" /&gt;
          &lt;!--  Do this every 60 seconds.--&gt;
          &lt;property name="cronExpression" value="0 * * * * ?" /&gt;
      &lt;/bean&gt;
  
  
  
  &lt;/beans&gt;
  </code></pre>
  
  <p>Job:</p>
  
  <pre><code>/**
   * 
   */
  package edu.uky.cepis.util.cron.job;
  
  import java.util.ArrayList;
  import java.util.Date;
  import java.util.List;
  import org.apache.log4j.Logger;
  import org.quartz.JobExecutionContext;
  import org.quartz.JobExecutionException;
  import org.quartz.SchedulerException;
  import org.springframework.context.ApplicationContext;
  import org.springframework.scheduling.quartz.QuartzJobBean;
  
  import edu.uky.cepis.service.AdvisingSessionService;
  import edu.uky.cepis.domain.AdvisingSession;
  
  /**
   * @author cawalk4
   * 
   * Purpose: Update all appointments with a date before the current date time
   * Setting the appointmentStatus to "No Show"
   * 
   */
  public class UpdateNoShowAppointmentJob extends QuartzJobBean {
  
      private static Logger log = Logger.getLogger(
          UpdateNoShowAppointmentJob.class);
  
      private AdvisingSessionService advisingSessionService;
  
      private static String NO_SHOW = "No Show";
  
      @Override
      protected void executeInternal(JobExecutionContext context)
              throws JobExecutionException {
  
          log.debug("Running UpdateNoShowAppointmentJob at " + new Date());
  
          ApplicationContext appContext = null;
  
          try {
              appContext = (ApplicationContext) context.getScheduler()
                  .getContext().get("applicationContext");
          } catch (SchedulerException se) {
              System.err.println(se);
          }
  
          try {
              advisingSessionService = (AdvisingSessionService) appContext
                  .getBean("advisingSessionService", AdvisingSessionService.class);
          } catch (Exception e) {
              System.err.println(e);
          }
          if (advisingSessionService != null) {
              List&lt;AdvisingSession&gt; advisingSessionList =
                  new ArrayList&lt;AdvisingSession&gt;(0);
  
              advisingSessionList = advisingSessionService.getNewNoShowAdvisingSessions();
  
              if (advisingSessionList == null) {
                  log.debug("advisingSessionSlotlist is null.");
                  return;
              } else if (advisingSessionList.isEmpty()) {
                  log.debug("There are no new No Show advising appointments.");
                  return;
              }
  
              log.debug("Total no show e-mails are: " + advisingSessionList.size());
  
              // Update the appointments 
  
              for(AdvisingSession advisingSession : advisingSessionList){
  
                  advisingSessionService.updateAdvisingSession(                   
                          advisingSession,
                          advisingSession.getSessionType(), 
                          NO_SHOW,
                          advisingSession.getPreSessionText(), 
                          advisingSession.getSessionText(), 
                          advisingSession.getStudentNotes(), 
                          advisingSession.getAdvisorNotes(), 
                          advisingSession.getAdvisingSessionSlot(), 
                          advisingSession.getNoShowEmailSentBoolean());
              }
          } else {
              log.debug("advisingSessionService is null.");
          }
      }
  
      public void setadvisingSessionService(AdvisingSessionService advisingSessionService) {
          this.advisingSessionService = advisingSessionService;
      }
  
      public AdvisingSessionService getadvisingSessionService() {
          return advisingSessionService;
      }
  }
  </code></pre>