Spring Quartz:工作不会开火

时间:2015-01-12 07:52:35

标签: java spring quartz-scheduler

我正在使用Quartz 2和Spring 3.0

我想使用 SchedulerFactoryBean ,但我的工作没有被解雇。

以下是我的XML文件

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="quartzScheduler"
        class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="autoStartup" value="true"/>
        <property name="schedulerName" value="PCLoaderScheduler"/>
    </bean>

</beans>

我的代码如下:

@Component
public class PCSchedulerManager {

    @Autowired
    private Scheduler scheduler;

    public void scheduleJob(final Map<String, Object> parameters, Class inputClass) throws PCSchedulerException {

        try {
            long currentTimeStamp = System.currentTimeMillis();

            JobDetail job = JobBuilder
                            .newJob(inputClass)
                            .withIdentity(inputClass.getName() + currentTimeStamp)
                            .build();
            job.getJobDataMap().putAll(parameters);

            Trigger trigger = TriggerBuilder
                                .newTrigger()
                                .withIdentity(inputClass.getName() + currentTimeStamp)
                                .build();

            //Schedule a job with JobDetail and Trigger
            scheduler.scheduleJob(job, trigger);

        } catch (SchedulerException e) {
            throw new PCSchedulerException(e);
        }
    }
}

请参阅作业我正在尝试执行

public class LoaderJob implements Job {

    public void execute(JobExecutionContext jec) throws JobExecutionException {
        System.out.println("Do your stuff here...");
    }

}

我知道调度程序是在服务器启动时启动的。但它没有完成我的工作。

另外,如果我使用下面的语句而不是自动装配Spring Quartz调度程序,那么该作业将被成功激活

scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();

请让我知道我做错了什么......

3 个答案:

答案 0 :(得分:1)

您是否需要将依赖项注入作业?然后实施QuartzJobBean

并覆盖executeInternal()方法。

另外请检查如果在执行作业时遇到任何异常。

答案 1 :(得分:1)

Quartz 2和Spring 3.0不兼容。将Spring更新到3.1。现在它工作正常

答案 2 :(得分:0)

首先,继续向配置xml文件中添加类似的内容。请注意如何更改repeatInterval和startDelay属性。或者,您也可以使用cron表达式。从this link了解它们。

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

    <bean id="cronTrgTest" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="testJob" />
        <property name="repeatInterval" value="5000" />
        <property name="startDelay" value="1000" />
    </bean>   

   <bean id="testJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
      <property name="targetObject" ref="cronTest" />
      <property name="targetMethod" value="test" />
   </bean>   

   <bean id="cronTest" class="com.mustafaergin.ws.cron.CronTest">
   </bean>

然后实现目标POJO,你就完成了。

public class CronTest {

    public void test() {
        System.out.println("TEST");
    }

}

您可以找到我刚才写的原始文章here