我从众多来源中读到,人们已经说过,可以并且打算在属性文件中将监听器实例化并注册到调度程序
但我到处搜索,找不到一个例子。
注意:我正在使用此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.
答案 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表达式,它描述了石英作业在这里重新开始的间隔
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)