究竟是什么在春天运行石英cron工作?

时间:2009-09-23 17:15:59

标签: java unit-testing spring quartz-scheduler

好人。我正在尝试在一个由maven管理的非常简单的项目中使用带有弹簧的石英。所以在mycron作业类的模块中我包含了一个java主类,只是为了看到作业输出一些文本和新日期。 这是我的春季配置:

<!--Scheduling-->
<!--Job-->
    <bean id="projUpdater" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.myproject.utilscheduling.quartz.ProjUpdaterCronImpl" />
    </bean>
<!---End of Jobs-->
<!--Triggers-->
    <bean id="regularUpdateTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="projUpdater"/>
        <property name="cronExpression" value="30 1 * * * ?"/>
    </bean>
<!--End ofTriggers-->
<!--Scheduler Factory-->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="regularUpdateTrigger"/>
        </list>
    </property>
</bean>
<!--End of Scheduler Factory-->
<!--End of Scheduling-->

这是工作类

public class ProjUpdaterCronImpl extends QuartzJobBean {

public ProjUpdaterCronImpl() {
}


protected void executeInternal (JobExecutionContext ctx) throws JobExecutionException {
    System.out.println("[JOB] " + new Date() + "hello");
}

}

这是主要的课程

public class NewMain {

/**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
    System.out.println("starting job");
 }

}

所以在我的理解中,这项工作将在1月30日之后开始并在控制台上发布。我错了。我遇到了我解决的情侣或错误,所以我可以安全地假设春天配置文件中没有错误,因为那里在建造和运行时没有。那么我做错了什么或者我忘了做了什么?

第二个问题,因为我强迫自己去测试驱动的方式,我将如何测试一个cron工作类? 感谢您的阅读

2 个答案:

答案 0 :(得分:1)

你的cron表达

<property name="cronExpression" value="30 1 * * * ?"/>

实际上将触发器配置为每小时1小时30秒后触发一次。

Zoidberg建议使用MethodInvokingJobDetailFactoryBean允许您将您的cron作业编码为POJO,以便于测试。

答案 1 :(得分:0)

为你的工作bean尝试这个。

<bean id="projUpdater" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="registeredObject" />
        <property name="targetMethod" value="methodNameInObject" />
    </bean>

您的registeredObject是在spring config中注册的bean。并且该方法是存在于该对象中的方法。