夫天地者,万物之逆旅;光阴者,百代之过客。而浮生若梦,为欢几何?
记录一下使用quartz任务调度遇到的一些坑

      最近项目中在使用quartz任务调度框架,基本的使用网上有大量的实例,这里就不详细说明,主要说一下在使用过程中遇到的问题。

一、在执行job任务时不能调用service层及dao层

      不能调用原因是service层和dao层的bean的注入是在spring容器中,而quartz是在自己的容器中所以不能注入。

解决思路把quartz的schedulerFactory注入到spring容器中,具体的实现代码如下:


1、继承ApplicationContextAware类获取spring上下文对象


/**
 * 用于获取当前的spirng容器。获取applicationContext.
 * created  on 2018/3/26
 */
public class SpringContextUtil implements ApplicationContextAware {
    // Spring应用上下文环境
    private static ApplicationContext applicationContext;
    /**
     * 实现ApplicationContextAware接口的回调方法,设置上下文环境
     *
     * @param applicationContext
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        SpringContextUtil.applicationContext = applicationContext;
    }
    /**
     * @return ApplicationContext
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }
    /**
     * 获取对象
     *
     * @param name
     * @return Object
     * @throws BeansException
     */
    public static Object getBean(String name) throws BeansException {
        return applicationContext.getBean(name);
    }
}



2、在applicationContext.xml中注入bean,注:lazy-init="false"必须添加

<bean id="springContextUtil" class="com.xxx.base.component.quartz.SpringContextUtil" lazy-init="false"></bean>

<bean id="adaptableJobFactory" class="com.xxx.quartz.AdaptableJobFactory"></bean>
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
   <property name="jobFactory" ref="adaptableJobFactory" />
</bean>



3、在quartz中实例化Scheduler

private static Scheduler scheduler = (Scheduler)SpringContextUtil
        .getApplicationContext().getBean("schedulerFactory");



最后网上有很多解决方法,但是总是不成功,注意因为这两点注意事项:

1、springContextUtil的bean必须注入到你项目中其他所有bean之前,否则不能成功。

2、实例化Scheduler的时候,获取spring中配置的schedulerFactory。

我在使用过程中就是由于以上这两个注意事项折腾了好几个小时,在此记录一下,希望对有需要的童鞋有所帮助。


作者:持之以恒

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

1

支持

0

反对

posted @2018-3-30  拜读(1452)

评论列表

#1楼 2018-3-6 1.203.183.104
很有用,我也是折腾了好几个小时

评论内容:



喜欢请打赏

支付宝 微信

请放心支付