如何将数据传递给作为MethodInvokingJobDetailFactoryBean运行的方法?
|
我真正想做的是创建一个不会同时运行的Quartz作业,但也可以访问ѭ0以获取ѭ1。这是我的对象:
// imports...
public class UtilityObject {
private SomeService someService;
@Autowired
public UtilityObject(SomeService someService) {
this.someService = someService;
}
public void execute(JobExecutionContext ctx) throws JobExecutionException {
Date prevDate = ctx.getPreviousFireTime();
// rest of the code...
}
}
这就是我配置bean的方式:
<bean name=\"utilityBean\" class=\"UtilityObject\" />
<bean id=\"utilityJob\"
class=\"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean\">
<property name=\"targetOjbect\" ref=\"utilityBean\" />
<property name=\"targetMethod\" value=\"execute\" />
<property name=\"concurrent\" value=\"false\" />
</bean>
<bean name=\"utilityTrigger\"
class=\"org.springframework.scheduling.quartz.SimpleTriggerBean\">
<property name=\"jobDetail\" ref=\"utilityJob\" />
<property name=\"startDelay\" value=\"5000\" />
<property name=\"repeatInterval\" value=\"20000\" />
</bean>
当我尝试运行此命令时,它在使用以下命令创建Bean的过程中失败
NoSuchMethodException:UtilityJob.execute()
有任何想法吗?
解:
阅读了skaffman的答案后,我能够使我的解决方案正常工作。使用我拥有的触发器,我知道名称是,并且知道默认组为\'DEFAULT \'。我让我的班级扩展了QuartzJobBean
类,然后添加了以下代码:
protected void executeInternal(JobExecutionContext ctx)
throws JobExecutionException {
boolean isRunning =
(ctx.getScheduler().getTriggerState(\"utilityTrigger\", \"DEFAULT\") ==
Trigger.STATE_BLOCKED);
if (isRunning) {
// run the job
}
}
对不起,格式怪异;这些是长队!
没有找到相关结果
已邀请:
2 个回复
臀夯脖锑
很方便,但是很原始-它只能执行不带参数的公共方法。 如果您的工作需要访问Quartz API,那么您将需要使用
和
而不是
。有关说明,请参阅文档。 runs4ѭ运行时会被当前的
传递。
骂陋冠
相同的方式将参数传递给
。 例如: