quartz

Edit

Quartz

Spring 에서의 Quartz 지원클래스들

Clutering

Code

  public boolean startJob(final JobDetail jobDetail, final Trigger trigger) {

    try { // If we got one already with the same name... overwrite it.
      if (sched.getJobDetail(jobDetail.getName(), Scheduler.DEFAULT_GROUP) != null) {
        deleteJob(jobDetail.getName(), Scheduler.DEFAULT_GROUP);
      }
      sched.scheduleJob(jobDetail, trigger);
      OutputStream feedbackOutputStream = getFeedbackOutputStream();
      if (feedbackOutputStream != null) {
        feedbackOutputStream.write(Messages.getString("JobSchedulerComponent.INFO_0001").getBytes()); //$NON-NLS-1$
      }
    } catch (SchedulerException e) {
      error(e.getLocalizedMessage());
      return false;
    } catch (IOException e) {
      error(e.getLocalizedMessage());
      return false;
    }
    return true;
  }

  public boolean suspendJob(final String jobName, final String groupName) {
    try {
      sched.pauseJob(jobName, groupName);
    } catch (SchedulerException e) {
      error(e.getLocalizedMessage());
      return false;
    }
    return true;
  }

  public boolean deleteJob(final String jobName, final String groupName) {
    try {
      sched.deleteJob(jobName, groupName);
    } catch (SchedulerException e) {
      error(e.getLocalizedMessage());
      return false;
    }
    return true;
  }

  public boolean resumeJob(final String jobName, final String groupName) {

    try {

      sched.resumeJob(jobName, groupName);
    } catch (SchedulerException e) {
      error(e.getLocalizedMessage());
      return false;
    }
    return true;

  }

}
    private Scheduler getSchedulerHandle(ServerModel serverModel) throws SchedulerException {
        Scheduler sche = null;
        if (isLocalHost(serverModel.getIp(), serverModel.getService())) {
            sche = localSche;
        } else {
            DirectSchedulerFactory sf = DirectSchedulerFactory.getInstance();
            sche = sf.getScheduler(serverModel.getQualifiedName());
            /*
             * if the shcheduler is not created yet.
             */
            if (sche == null) {
                sf.createRemoteScheduler(serverModel.getQualifiedName(), DirectSchedulerFactory.DEFAULT_INSTANCE_ID,
                    serverModel.getQualifiedName(), serverModel.getIp(), this.getPort());
                sche = sf.getScheduler(serverModel.getQualifiedName());
            }
        }
        if (sche == null) {
            throw new SchedulerException("can't find the scheduler");
        }
        return sche;
    }

스케쥴러 생성

Scheduler sched = QuartzSystemListener.getSchedulerInstance();

StdSchedulerFactory sf = new StdSchedulerFactory();
sf.initialize(prop);
localSche = sf.getScheduler();

JobStore

Listener

TriggerListener, JobListener, SchedulerListener

Quartz Spring

Spring활용

org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean

org.springframework.scheduling.quartz.JobDetailBean

을 상속한 클래스 또는

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
  <property name="triggers">
    <list>
      <ref bean="testCronTriggerBean" />
    </list>
  </property>
</bean>

<bean id="testCronTriggerBean"
      class="org.springframework.scheduling.quartz.CronTriggerBean">
  <property name="jobDetail">
    <bean id="jobDetailBeanExternalAPIReq"
          class="org.springframework.scheduling.quartz.JobDetailBean">
      <property name="jobClass" ref="testJob"/>
    </bean>
  </property>
  <property name="cronExpression" value="0/30 * * * * ?" />
</bean>

<bean id="testJob" class="com.benelog.job.TestJob">
</bean>

<bean id="testJobCronTriggerBean"
      class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail">
        <bean
            class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="testJob"/>
            <property name="targetMethod" value="execute"/>
        </bean>
    </property>
    <property name="cronExpression" value="0/30 * * * * ?" />
</bean>

<bean id="testJob" class="com.benelog.TestJob">
    <property name="schedulerMtrDAO" ref="schedulerMtrDAO" />
</bean>