`
阅读更多

Spring quartz Job不能依赖注入,Spring整合quartz Job任务不能注入

Spring4整合quartz2.2.3中Job任务使用@Autowired不能注入

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年8月29日

http://fanshuyao.iteye.com/

 

一、问题描述:

使用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。

 

 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年8月29日

http://fanshuyao.iteye.com/

 

 

 

1
0
分享到:
评论
1 楼 蕃薯耀 2017-08-29  
Spring quartz Job不能依赖注入,Spring整合quartz Job任务不能注入
Spring4整合quartz2.2.3中Job任务使用@Autowired不能注入

>>>>>>>
蕃薯耀

相关推荐

    Spring quartz Job依赖注入使用详解

    主要介绍了Spring quartz Job依赖注入使用详解的相关资料,Spring quartz Job不能依赖注入,Spring整合quartz Job任务不能注入Spring4整合quartz2.2.3中Job任务使用@Autowired不能注入,需要的朋友可以参考下

    SpringQuartz的使用文档

    SpringQuartz是一个强大的任务调度框架,它在Java应用程序中用于自动化执行特定任务,如定时生成文件、统计数据或执行后台清理工作。Quartz是开源的,具有高度灵活的调度功能,能够根据预定义的时间表触发任务,同时...

    spring quartz定时任务demo

    Spring框架则是一个广泛使用的全面的企业级应用开发框架,它简化了Java应用的开发,提供了依赖注入(DI)和面向切面编程(AOP)等功能。Spring集成Quartz,使得定时任务的管理变得更加方便和灵活。 在“spring ...

    Java_Spring与Quartz的整合

    - Spring支持使用`@Component`注解Job类,使其成为Spring Bean,便于管理和依赖注入。 3. **定义Trigger** - Trigger定义了Job何时执行。Quartz提供了多种Trigger类型,如SimpleTrigger(简单触发器)、...

    spring和quartz的定时器的启动和停止例子

    在实际项目中,还可以根据需求对任务进行分组、优先级排序、任务依赖设置等高级功能,以满足复杂的调度需求。记得在生产环境中,确保Quartz与数据库的稳定连接,并对定时任务进行充分测试,以保证系统的稳定运行。

    spring整合quartz定时任务调度

    Spring框架作为Java领域广泛使用的轻量级框架,提供了与第三方库Quartz的整合,使得开发者能够轻松地在Spring应用中实现复杂的定时任务调度。Quartz是一款开源的作业调度框架,支持丰富的调度策略,可以满足各种定时...

    spring Quartz的jar包

    Spring Quartz是Spring框架与Quartz任务调度库的集成,它为开发者提供了在Spring应用中进行任务调度的强大功能。Quartz是一个开源的作业调度框架,能够处理执行周期性任务的需求。在Java环境中,Spring Quartz使得...

    Spring整合quartz2.2.3总结,quartz动态定时任务,Quartz定时任务集群配置

    Quartz是一款开源的作业调度框架,它允许程序在特定时间执行预定的任务,而Spring则是一个强大的企业级应用开发框架,提供了丰富的依赖注入(DI)和面向切面编程(AOP)等功能。将两者结合,可以方便地在Spring应用...

    spring+quartz demo

    通过这个 "spring+quartz demo",开发者可以快速理解并实践 Spring 和 Quartz 的整合,掌握如何在 Spring 应用中高效地管理和执行定时任务。这个示例项目提供了直接运行的代码,有助于加深对这些概念的理解。

    spring2与quartz在Web整合

    3. **整合过程**:整合 Spring 2 和 Quartz 需要在 Spring 配置文件中声明 Job 和 Trigger 的 Bean,并指定它们的关联。Spring 可以通过其自身的 JobFactory 来创建 Job 实例,使得 Job 可以利用 Spring 的 DI 功能...

    Spring Quartz定时任务 jar包

    Spring Quartz定时任务是Java开发中常见的一种任务调度框架,它结合了Spring的优秀特性与Quartz的灵活性,使得开发者能够方便地在应用中实现定时任务的管理。在本压缩包中,包含的是`log4j-1.2.14.jar`这个日志处理...

    springQuartz.zip

    2. **Spring与Quartz的集成**:Spring 提供了对Quartz的整合,使得我们可以利用Spring的IOC(控制反转)来管理Scheduler实例,以及Job和Trigger。这使得任务的创建和管理变得更加灵活和方便。 3. **配置定时任务**...

    spring quartz 整合示例

    在IT行业中,Spring框架与Quartz的整合是一个常见的任务调度解决方案。这个压缩包文件提供了一个实际的示例,用于演示如何在Spring应用中集成Quartz进行任务调度。下面将详细解释其中涉及的知识点。 首先,Quartz是...

    spring quartz 表达式在线生成器

    标题中的“Spring Quartz 表达式在线...总的来说,了解和使用Spring Quartz表达式在线生成器,不仅可以提升开发效率,还能帮助理解定时任务调度的底层机制,对于任何需要处理周期性任务的Java开发者来说都是一大助力。

    spring quartz相关jar包(多版本)

    关于标签"springquartz jar包",这表明这些 jar 文件是专门为整合 Spring 和 Quartz 而准备的。Spring 提供了对 Quartz 的支持,使得开发者可以通过 Spring 的 XML 配置或者注解方式声明和管理 Quartz 调度器,简化...

    spring注解Quartz定时执行功能

    Spring通过其优秀的依赖注入(DI)和AOP(面向切面编程)特性,与Quartz相结合,简化了定时任务的配置和管理。下面我们将深入探讨如何利用Spring注解实现Quartz定时执行功能。 首先,我们需要引入Quartz和Spring的...

    spring quartz

    我们可以使用`JobDetailBean`和`TriggerBean`来自定义Job和Trigger,并通过Spring的依赖注入来管理Job的生命周期和属性。 以下是如何在Spring应用中配置和使用Spring Quartz的步骤: 1. **添加依赖**:在项目中...

    spring-quartz定时任务小实例

    这包括自动初始化Scheduler,以及通过Spring的依赖注入(DI)来管理Job的生命周期。 3. **创建Job类**:在Spring-Quartz中,你需要创建一个实现了`org.springframework.scheduling.quartz.JobDetailBean`接口的类,...

    ssm-springMVC-整合Quartz(解决了无法注入service问题)-项目示例

    通过这样的整合,我们能够充分利用Quartz的定时任务能力,同时保持Spring的依赖注入优势,提高代码的可维护性和灵活性。这在处理如数据同步、报表生成等定时任务时非常有用。务必注意,合理设计任务调度策略,避免...

    spring quartz 任务调度

    Spring与Quartz的整合使得我们可以利用Spring的依赖注入(DI)和声明式事务管理等功能,进一步增强了Quartz的易用性和可维护性。在Spring中使用Quartz,我们需要引入quartz和spring-quartz依赖,并在Spring配置文件...

Global site tag (gtag.js) - Google Analytics