从QuartzJob访问我的应用程序上下文

时间:2017-02-20 14:25:03

标签: java spring quartz-scheduler applicationcontext

我不知道如何从Quartz Job访问我的应用程序的原始上下文。

我可以看到两个上下文都没有通信,因为我试图将DAO bean作为Quartz Job bean的属性注入,我得到了这个错误:

  

没有这样的bean命名:“我试图作为属性注入的DAO bean”。

有没有办法从我的QuartzJob中使用DAO?

1 个答案:

答案 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>