我不知道如何从Quartz Job访问我的应用程序的原始上下文。
我可以看到两个上下文都没有通信,因为我试图将DAO bean作为Quartz Job bean的属性注入,我得到了这个错误:
没有这样的bean命名:“我试图作为属性注入的DAO bean”。
有没有办法从我的QuartzJob中使用DAO?
答案 0 :(得分:0)
(代表OP发布)。
<强>解决方案:强>
在Job中(必须获取接口):
public class SchedulerJob extends QuartzJobBean {
public void executeInternal(JobExecutionContext context)
throws JobExecutionException {
try{
<YOUR_BEAN_DAO_INTERFACE_OBJECT> = ((ApplicationContext) context.getJobDetail().getJobDataMap().get("applicationContext")).get("<YOUR_BEAN_DAO_INTERFACE_ID>");
} catch (Exception e ){
e.printStackTrace();
return;
}
}
}
在应用程序的.xml上下文中:还需要在此XML中将<YOUR_BEAN_DAO_INTERFACE>
声明为bean:
<!-- Spring Quartz Scheduler job -->
<bean name="schedulerJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="<PATH_OF_YOUR_CLASS_JOB>.SchedulerJob" />
<property name="applicationContextJobDataKey" value="applicationContext" />
</bean>
<!-- Cron Trigger, run every 10 seconds -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="schedulerJob" />
<property name="cronExpression" value="0/10 * * * * ?" />
</bean>
<!-- DI -->
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobDetails">
<list>
<ref bean="schedulerJob" />
</list>
</property>
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>