在Spring中使用相同的作业详细信息动态重新安排CronTriggerBean

时间:2011-01-24 04:25:23

标签: spring scheduling quartz-scheduler crontab

我的任务是使用用户从GUI指定的预定时间动态生成报告。

我在春天的应用程序的应用程序上下文中使用以下代码每天生成报告6 A.M ..

<bean name="scheduleRptJob" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="com.secant.qatool.report.scheduler.ScheduleCroneJob"/>
</bean>

<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="scheduleRptJob" />

             

<bean id="schedulerFactory"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger"/>
        </list>
    </property>
</bean>

我正在使用以下代码从控制器动态更改cron表达式。但它没有用。

    String time[] = rptScheduleTime.split(":");

    String hours = time[0];
    String minutes = time[1];

    String croneExp = " 00 " + minutes + " " + hours + " * * ? ";

    log.debug("CRONE EXP :: " + croneExp);

    cronTrigger.clearAllTriggerListeners();

    // Setting the crown expression.
    cronTrigger.setCronExpression(croneExp);

    Trigger[] triggers = {cronTrigger};

    // Code to pause and start the cron trigger.
    schedulerFactory.stop();
    schedulerFactory.setTriggers(triggers);
    schedulerFactory.start();

有人可以帮助我如何用动态时间重新安排同样的工作。

谢谢,

-Anil Kumar.C

2 个答案:

答案 0 :(得分:4)

春季论坛中有一个关于此问题的帖子,它会找到解决问题的方法:http://forum.springsource.org/showthread.php?t=31736

但是不是手动更改文件中的cron表达式,而是每次从保存值的对象中使用弹簧表达式语言来读取它。

答案 1 :(得分:1)

我找到this个帖子,他们从DB读取cron expr然后重新安排作业。你只是不会从数据库中读取它,而是直接从GUI传递它。