• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Spring quartz Job依赖注入使用详解

    Spring quartz Job依赖注入使用详解

    一、问题描述:

    使用Spring整合quartz实现动态任务时,想在job定时任务中使用某个service时,直接通过加注解@Component、@Autowired是不能注入的,获取的对象为Null。如下面的代码:

    @Component 
    @PersistJobDataAfterExecution 
    @DisallowConcurrentExecution 
    public class TicketSalePriceLessThanLowestPriceJob implements Job{ 
     
      @Autowired 
      private XxxService xxxService; 
     
    } 
    

     二、解决方案:

    1、新增一个自定义类(CustomJobFactory),继承SpringBeanJobFactory,代码如下:

    import org.quartz.spi.TriggerFiredBundle; 
    import org.springframework.beans.factory.annotation.Autowired; 
    import org.springframework.beans.factory.config.AutowireCapableBeanFactory; 
    import org.springframework.scheduling.quartz.SpringBeanJobFactory; 
     
    public class CustomJobFactory extends SpringBeanJobFactory{ 
     
      @Autowired  
      private AutowireCapableBeanFactory capableBeanFactory;  
      
      @Override  
      protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {  
        //调用父类的方法  
        Object jobInstance = super.createJobInstance(bundle);  
        //进行注入  
        capableBeanFactory.autowireBean(jobInstance);  
        return jobInstance;  
      } 
       
    } 
     
    

    2、在spring.xml文件配置CustomJobFactory,如下:

    bean id="customJobFactory" class="cn.imovie.manage.task.job.CustomJobFactory">/bean> 
    

    3、将自定义CustomJobFactory注入到org.springframework.scheduling.quartz.SchedulerFactoryBean,具体如下:

    property name="jobFactory" ref="customJobFactory">/property> 
     
    

    完整代码如下:

    !-- 定时任务配置 start --> 
      bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
        property name="dataSource" ref="dataSource">/property>   
        !--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->    
        property name="overwriteExistingJobs" value="true" />    
         !--必须的,QuartzScheduler 延时启动,应用启动完后 QuartzScheduler 再启动 -->   
        property name="startupDelay" value="10" />   
        !-- 设置自动启动 -->   
        property name="autoStartup" value="true" />  
        property name="jobFactory" ref="customJobFactory">/property> 
        property name="applicationContextSchedulerContextKey" value="applicationContextKey" /> 
        property name="configLocation" value="classpath:spring-quartz.properties" />    
      /bean> 
      !-- 定时任务配置 end --> 
    

    4、然后就可以在Job任务类使用@Autowired注入service。

    如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • Spring入门配置和DL依赖注入实现图解
    • spring依赖注入原理与用法实例分析
    • 详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
    • Spring bean的实例化和IOC依赖注入详解
    • SpringBoot的拦截器中依赖注入为null的解决方法
    • 浅谈Spring IoC容器的依赖注入原理
    • 理解Spring中的依赖注入和控制反转
    • Spring依赖注入的三种方式实例详解
    • Spring依赖注入的三种方式小结
    • 因Spring AOP导致@Autowired依赖注入失败的解决方法
    • Spring依赖注入的两种方式(根据实例详解)
    • Spring 依赖注入的几种方式详解
    • Spring 依赖注入实现示例
    上一篇:浅谈jsp中的9个隐含对象
    下一篇:Spring Quartz2 动态任务的实例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Spring quartz Job依赖注入使用详解 Spring,quartz,Job,依赖,注入,