2013-06-20 15 views
2

我已经从很多来源读到人们说过有可能并且意图让听众可以在属性文件中实例化并注册到调度程序的所有内容如何在quartz.properties文件中实例化并注册JobListener?

但是我到处搜索并找不到单个这个例子。

注意:我正在使用此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类#

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

感谢您的帮助球员。余完全错过这(Quartz config documentation下):

例如,如果该属性文件包含属性“org.quartz.jobStore.myProp = 10”的作业存储类已被实例化在此之后,方法“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

这里你可以找到如何HOR使用石英和wrtie并触发您的工作

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

石英有描述石英作业的间隔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(); 

如果您使用的春天,那么你可以在你的背景文件提到的

所有石英属性
<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> 
+0

感谢您的回答,但这根本不是我想要的。我已经更新了我的问题 – Vyrnach

+0

我在项目中使用了Spring,但我没有将它用于我的石英调度程序。我用这个来初始化调度器 http://quartz-scheduler.org/api/2.1.7/org/quartz/ee/servlet/QuartzInitializerServlet.html – Vyrnach

+0

我没有用这种方式使用石英,但我更新我的答复提供给财产工厂的财产文件选项 –

1

你已经几乎做的事情。

refer 此链接。 您只需在石英中指定侦听器类的名称即可。属性文件 ,并确保指定的侦听器类位于您的类路径中。

请参阅this 有关如何使用joblistener的文章,除了部分使用调度程序注册 joblistener。相反,将上述属性添加到石英属性文件中。

相关问题