如何在quartz.properties文件中实例化和注册JobListener?

时间:2013-06-20 03:04:57

标签: quartz-scheduler

我从众多来源中读到,人们已经说过,可以并且打算在属性文件中将监听器实例化并注册到调度程序

但我到处搜索,找不到一个例子。

注意:我正在使用此Quartz Initiazlizer Servlet来启动我的调度程序。因此,我将无法使用将JobListener注册到调度程序的传统方法。其他方法是非常接受的

基本上我想这样做:

JobListener jobListener = new SchedulerGlobalListener();
scheduler.getListenerManager().addJobListener(jobListener);

在此(在quartz.properties下)

org.quartz.jobListener.NAME.class = com.foo.MyListenerClass
org.quartz.jobListener.NAME.propName = propValue
org.quartz.jobListener.NAME.prop2Name = prop2Value

* * 以下是我的尝试和结果

#quartz.properties#

org.quartz.jobListener.SchedulerGlobalListener.class = com.scheduler.SchedulerGlobalListener

#listener class#

public class SchedulerGlobalListener implements JobListener {

    private String name;

    public SchedulerGlobalListener() {
    }

    public SchedulerGlobalListener(String name) {
        if(name.isEmpty())
        {
            this.name = "SchedulerGlobalListener";
        }
        else
        {
            this.name = name;
        }
    }

    @Override
    public String getName() {
        return name;
    }

    public String setName(String name) {
        return name;
    }

    @Override
    public void jobToBeExecuted(JobExecutionContext context) {
        // do something with the event
    }

    @Override
    public void jobWasExecuted(JobExecutionContext context, JobExecutionException   jobException) {
        System.out.println("I just ran this job: " +   context.getJobDetail().getJobClass().getName());
    }

    @Override
    public void jobExecutionVetoed(JobExecutionContext context) {
        // do something with the event
    }
    }

结果:

INFO: QuartzInitializer: Quartz Scheduler failed to initialize: java.lang.IllegalArgumentException: JobListener name cannot be empty.

3 个答案:

答案 0 :(得分:3)

感谢帮助人员。我完全错过了这个(Quartz config documentation下):

  

例如,如果属性文件包含属性'org.quartz.jobStore.myProp = 10',那么在实例化JobStore类之后,将在其上调用方法'setMyProp()'。

<强> quartz.properties

  

org.quartz.jobListener.SchedulerGlobalListener.class =   com.scheduler.SchedulerGlobalListener   org.quartz.jobListener.SchedulerGlobalListener.globalListenerName =   SchedulerGlobalListener

<强> SchedulerGlobalListener.java

public void setGlobalListenerName(String name) {
        this.name = name;
    }

答案 1 :(得分:1)

在这里你可以找到如何使用Quartz和wrtie并触发你的工作

http://www.mkyong.com/java/quartz-joblistener-example/

在Quartz中有一个cron表达式,它描述了石英作业在这里重新开始的间隔

  1. http://quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
  2. http://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm 你找到了如何编写cron表达式。
  3. Quartz简单触发器

    Trigger trigger = TriggerBuilder
        .newTrigger()
        .withIdentity("TriggerName", "group1")
        .withSchedule(
            SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInSeconds(5).repeatForever())
        .build();
    

    Quartz Cron Trigger

    Trigger trigger = TriggerBuilder
        .newTrigger()
        .withIdentity("TriggerName", "group1")
        .withSchedule(
            CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
        .build();
    

    如果您使用的是弹簧,那么您可以在上下文文件中提及所有石英属性

    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger" />
                <ref bean="simpleTrigger" />
            </list>
        </property>
        <property name="quartzProperties">
            <props>
                <prop key="propertName">propertyValue</prop>
            </props>
        </property>
    </bean>
    

    <bean id="beanName" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" destroy-method="destroy">  
          <property name="jobFactory">   
               <bean class="org.springframework.scheduling.quartz.SpringBeanJobFactory"/>  
           </property>
           <property name="dataSource" ref="JNDIDataSource" />  
           <property name="transactionManager" ref="transactionManager" />  
    
           <property name="quartzProperties">    
               <util:properties location="classpath:/quartz.properties"/>  
           </property>
    
           <property name="triggers">
                <list>
                    <ref bean="triggerBean"/>
                </list>
           </property>
        </bean>
    

答案 2 :(得分:1)

你已经做过差不多了。

refer 这个链接。 您只需在quartz.properties文件中指定侦听器类的名称 并确保指定的侦听器类位于类路径中。

参考this 有关如何使用joblistener的文章,除了要注册的部分 带调度程序的joblistener。而是将上述属性添加到quartz属性文件中。