0 0

Spring中Quartz任务调度器不能识别注解的问题5

原来在项目中使用配置在applicationContext.xml的方式实现了调度器的功能,现在spring升级到3.0.2的版本后想用注解的方式实现发现老出现问题,主要是主动到调度器类中的业务对象不能被识别了。代码如下:

import javax.annotation.Resource;
import javax.annotation.*;

import org.apache.log4j.Logger;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
import org.springframework.stereotype.Component;

import com.aisino.heb.cjrqy.cjzdgl.service.CaijizhongduanguanliServiceImple;

@Component
@SuppressWarnings("unchecked")
public class CjzdScann extends QuartzJobBean
{

    @Resource
    private CaijizhongduanguanliServiceImple caijizhongduanguanliServiceImple;//业务对象

    // String filename = pro.getProperty("log4j.appender.E.file");
    private static Logger                    log = Logger
                                                         .getLogger(CjzdScann.class);

    @Override
    protected void executeInternal(JobExecutionContext arg0)
            throws JobExecutionException {  
        System.out.println(caijizhongduanguanliServiceImple);
        caijizhongduanguanliServiceImple.cjzdscann();   //调用具体的业务。
    }
}
applicationContext.xml中的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
<property name="triggers">
<list>
<ref bean="repaymentRulesQuartz" />
</list>
</property>
   </bean>


<!-- 触发器 -->
<bean id="repaymentRulesQuartz" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<!-- 指定触发的包装作业 -->
<property name="jobDetail">
<ref bean="repaymentRulesTimer"/>
</property>
<!-- 延迟多久触发 1秒-->
<property name="startDelay">
<value>6000</value>
</property>
<!-- 每隔多久执行一次 3秒-->
<property name="repeatInterval">
<value>60000</value>
</property>
</bean>


<!-- 包装作业 -->

<bean id="repaymentRulesTimer"
class="org.springframework.scheduling.quartz.JobDetailBean">
<!-- 直接定义bean 作业-->
<property name="jobClass"
value="com.aisino.heb.cjrqy.jobs.CjzdScann">
</property>
<!-- 将值依赖注入给TestQuartz中的属性
<property name="jobDataAsMap">
<map>
<entry key="caijizhongduanguanliServiceImple" value-ref="caijizhongduanguanliServiceImple"></entry>
</map>
</property>
-->
</bean>
</beans>

现在项目启动后调度器这个类可以正常被调用,但业务对象却始终为null,也就是没有被注入进来,我从网上查了一下说可以加入lazy-init="true"解决问题,测试后还是不行,报出的错误如下:
2013-05-01 20:33:03.868 Job DEFAULT.repaymentRulesTimer threw an unhandled Exception:

java.lang.NullPointerException
at com.aisino.heb.cjrqy.jobs.CjzdScann.executeInternal(CjzdScann.java:30)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
2013-05-01 20:33:03.868 Job (DEFAULT.repaymentRulesTimer threw an exception.

org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NullPointerException]
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525)
Caused by: java.lang.NullPointerException
at com.aisino.heb.cjrqy.jobs.CjzdScann.executeInternal(CjzdScann.java:30)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
... 1 more
2013年5月01日 20:35

1个答案 按时间排序 按投票排序

0 0

<property name="jobClass"
value="com.aisino.heb.cjrqy.jobs.CjzdScann">
</property>

此处不是由spring创建 而是quartz自己反射new  所以不会注入

1、写一个SpringUtils 去获取依赖
可以到 SpringMVC + spring3.1.1 + hibernate4.1.0 集成及常见问题总结下载

2、使用如下 代替
<!-- force cancel order -->
    <bean id="cancelOrder"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
          <property name="targetObject" ref="portalOrderCancelEbo" />
          <property name="targetMethod" value="autoCancelOrder" />
          <property name="concurrent" value="false" />
     </bean>

2013年5月01日 21:39

相关推荐

    spring注解Quartz定时执行功能

    在Spring框架中集成Quartz库...当Spring应用启动时,Quartz调度器会自动启动并按照预定的计划执行任务。在实际开发中,你可以根据需求调整定时任务的执行周期、并发控制和数据持久化策略,以满足复杂的定时任务需求。

    spring quartz 任务调度

    在IT行业中,任务调度是一项重要的功能,特别是在大型系统和企业级应用中,它能帮助我们自动化执行周期性或定时的任务。Spring框架作为一个全面的企业级应用开发解决方案,提供了强大的任务调度支持,而Quartz则是一...

    spring集成quartz 任务调度

    Spring集成Quartz是一款高效的任务调度框架,用于在Java应用程序中执行计划、周期性的任务。Quartz与Spring的结合,使得我们可以充分利用Spring的依赖注入(DI)和AOP特性,简化了任务调度的复杂性。 首先,Quartz...

    Spring Quartz 任务调度

    综上所述,Spring Quartz 为开发者提供了一种强大且灵活的方式来管理任务调度,无论是简单的周期性任务还是复杂的调度场景,都能应对自如。结合 Spring 的特性,可以方便地实现任务的定义、调度、监控和扩展,是企业...

    Spring quartz 定时任务调度

    Spring Quartz 是一个强大的开源任务调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在Spring框架中集成Quartz,可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect Oriented Programming...

    Spring quartz任务调度

    标题“Spring quartz任务调度”指的是在Java开发中利用Spring框架集成Quartz库来实现应用程序的任务调度功能。Quartz是一款开源的作业调度框架,它允许开发者安排任务在特定时间执行,而Spring框架则提供了与Quartz...

    spring 任务调度

    Spring Task是Spring内置的轻量级任务调度器,而Quartz是更强大的第三方调度库,可以在Spring中集成使用。 1. **Spring Task** - **基本概念**:Spring Task是Spring框架的一部分,提供了基本的定时任务调度功能,...

    Quartz2.2.1基于Spring注解方式配置Quartz

    总结,通过上述步骤,我们已经成功地使用Spring注解配置了Quartz2.2.1,实现了基于注解的任务调度。这种方式简化了配置,使得任务管理和扩展更加方便。在实际开发中,可以根据项目需求调整触发规则,实现复杂的定时...

    Spring下使用Quartz任务调度

    这篇博客“Spring下使用Quartz任务调度”将深入探讨如何在Spring环境中集成并使用Quartz进行任务管理。 Quartz是一个开源的作业调度框架,它可以被用来创建、调度和执行任务,支持复杂的调度策略。其核心特性包括可...

    schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统.zip

    【标题】:基于Spring Boot和Quartz的分布式任务调度系统 在现代企业级应用中,任务调度是一项重要的功能,用于按预定的时间间隔执行特定的任务,例如数据同步、报表生成、清理过期数据等。本项目名为“schedule-...

    spring+quartz动态定时任务创建 +mybatis

    当结合Quartz,一个强大的任务调度库,我们可以实现动态的定时任务创建,这在业务逻辑中有着广泛的应用,如数据同步、定时报表生成等。 **Spring框架** Spring框架是Java开发者必备的工具之一。它提供了一个统一的...

    spring-quartz定时任务小实例

    Spring Quartz 是一个强大的任务调度框架,它允许开发者在Java应用中定义和执行定时任务。本实例将探讨如何在Spring框架中集成Quartz,创建并运行一个简单的定时任务。以下是你需要知道的关键知识点: 1. **Quartz...

    Spring quartz定时调度jar包

    首先,你需要在Spring的配置文件中声明一个`SchedulerFactoryBean`,这将初始化并管理Quartz调度器。然后,你可以定义`JobDetail`和`Trigger`,`JobDetail`代表你要执行的任务,而`Trigger`定义了任务的执行时机。...

    关于spring中quartz的配置

    在Spring框架中集成Quartz是一款常见的任务调度解决方案,它允许开发者在应用中安排定时任务的执行。Quartz是一个开源的作业调度框架,可以用来在Java应用程序中安排复杂的作业任务。以下将详细介绍如何在Spring中...

    spring的三种任务调度实现方式lib

    在Spring中使用Quartz,你需要配置`QuartzScheduler` bean,并将任务作为`JobDetail`注册到调度器中,然后通过`Trigger`定义触发条件。这种方式适合需要更复杂调度逻辑的应用场景。 3. Spring Batch Spring Batch...

    spring+quartz 动态任务方案

    3. **启动调度服务**:最后是启动 Quartz 调度服务,通常会在应用启动时通过一个 Servlet 来初始化调度器并启动任务。 #### 三、Spring + Quartz 动态任务方案详解 根据提供的代码片段,可以看出这是一个基于 ...

    定时框架spring+quartz

    6. **启动Scheduler**:在Spring的启动代码中,通过SchedulerFactoryBean启动Quartz的调度器。 这种集成方式的一个显著优点是,Spring的依赖注入和AOP特性可以应用于Quartz Job,使得任务的编写和管理更加方便。...

    任务调度 quartz

    下面我们将深入探讨原生Quartz任务调度的实现步骤,以及在Spring Boot中集成Quartz的详细过程。 ### 原生Quartz任务调度实现步骤 1. **引入依赖**:首先,在项目中添加Quartz库的依赖,如果是Maven项目,可以在pom...

    Spring实现任务调度

    Spring框架提供了强大的任务调度能力,使得开发者能够轻松地在Java环境中实现这一功能。本篇将深入探讨如何利用Spring进行任务调度,并结合代码演示和Quartz库的使用来丰富这一主题。 首先,Spring提供了两种主要的...

    完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题

    在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...

Global site tag (gtag.js) - Google Analytics