2

我从许多来源读到人们说有可能并打算在属性文件中实例化侦听器并将其注册到调度程序

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

注意:我正在使用这个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

#监听类#

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

3 回答 3

4

谢谢你们的帮助。我完全错过了这个(在Quartz 配置文档下):

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

石英属性

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

SchedulerGlobalListener.java

public void setGlobalListenerName(String name) {
        this.name = name;
    }
于 2013-06-21T09:41:33.223 回答
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 表达式。

石英简单触发器

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

石英计时触发器

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

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

<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>
于 2013-06-20T03:08:58.553 回答
1

你已经做的差不多了。

参考 此链接。您只需在quartz.properties 文件中指定侦听器类的名称,并确保指定的侦听器类在您的类路径中。

除了将joblistener注册到scheduler的部分外,参考这篇 文章如何使用joblistener。相反,将上述属性添加到石英属性文件中。

于 2013-06-20T06:50:45.520 回答