我正在使用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();
请让我知道我做错了什么......
答案 0 :(得分:1)
答案 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。