在使用Quartz的时候,遇到了一个问题困扰了好久
就是在执行Job的时候,发现父类封装的一些Dao方法无法使用,断点一执行到相应位置就结束了,并且不报任何错误
也算范低级错误了,后来才想到,Exception没有捕获的就不报任何错误
后来写了try/catch,发现原来是要注入的Dao,获取的对象都是空
才明白是没有注入接口实现
可是自己明明在Spring中定义了Job的Bean
----------------------
后来明白,在创建Job时,代码如下
JobDetail initJob = new JobDetail("initJob", "InitGroup",
InitJob.class);
这样写其实是通过反射的方式创建的Job类,并不是通过Spring来创建的,所以他不会注入父类中封装的Dao
具体的方法可以如下
<!--定时器任务配置(开始)-->
<!--配置JOB-->
<!--方法一-->
<bean id="initJobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="initJob" />
<property name="targetMethod" value="executeA" />
<!-- <property name="arguments" /> -->
</bean>
<!--方法二-->
<!-- <bean name="initJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> -->
<!-- <property name="jobClass" value="com.xxx.services.InitJob" /> -->
<!-- </bean> -->
第一种方法就是通过Spring中Quartz的Factory工厂来创建Job的,这样就可以通过Spring注入接口实例了
第二种则是和使用Java代码的方式相同,指定class类,实际上还是Quartz内部通过反射来实现,并没有使用Spring注入
分享到:
相关推荐
2. **定义Job类**:创建一个实现了`org.quartz.Job`接口的类,这个类会包含实际的业务逻辑。在这里,我们可能会遇到无法注入Service的问题,因为Job不是由Spring管理的。 3. **解决注入问题**:有两种常见解决方案...
4. **JobFactory的自定义**:Quartz默认使用SimpleJobFactory来创建Job实例,但我们可以自定义一个继承自SpringBeanJobFactory的类,使得在创建Job实例时,Spring会自动处理依赖注入。 **Quartz注入Spring Bean的...
Job是Quartz的核心接口,需要实现`org.quartz.Job`接口或其子接口`org.quartz.StatefulJob`。在Spring中,通常会使用`org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean`来包装一个带有@...
在这个测试实例中,Spring负责处理依赖注入、事务管理、Bean的生命周期管理等核心功能,同时通过与Quartz的集成,扩展了其在定时任务领域的应用。 这个项目包含两个主要的目录:`src`和`WebRoot`。`src`目录通常...
3. **创建Job类**:在Spring-Quartz中,你需要创建一个实现了`org.springframework.scheduling.quartz.JobDetailBean`接口的类,该类代表了你要执行的任务。你可以在这个类中定义任务的具体逻辑。 4. **定义Trigger...
总结来说,"quartz线程工程实例"是一个关于如何在Java项目中使用Quartz框架来实现任务调度的实例,涵盖了从创建Scheduler、定义Job、设计Trigger,到Spring集成Quartz、动态调度、线程控制和持久化等一系列关键知识...
4. 实现Job接口:在实际的业务代码中,我们需要创建一个实现了`org.quartz.Job`接口的类,定义`execute(JobExecutionContext context)`方法,这个方法会在Trigger触发时被执行。 ```java public class MyJob ...
服务类可能会有一个方法来启动或唤醒Quartz Job,这个方法可能会调用Quartz的`Scheduler`接口的相关方法。 接下来,`TestQuartzTimer.java`可能是测试类,用于验证Quartz的配置和任务执行是否正常。在测试类中,...
你需要创建实现了`org.quartz.Job`接口的类,定义具体的作业逻辑。然后,创建一个或多个`Trigger`,定义何时触发这个Job。触发器可以是SimpleTrigger(一次性执行)或CronTrigger(按照Cron表达式周期性执行)。 ``...
【标题】"Spring+Quartz+Maven项目实例"是一个基于Spring框架集成Quartz作业调度库的实战项目,采用Maven作为构建工具。这个实例旨在展示如何在Java应用程序中实现定时任务,支持两种运行模式,既可以直接以独立的...
10. **扩展性**:Quartz的灵活性使得它易于扩展,可以集成到Spring框架中,利用Spring的依赖注入特性管理Job和Trigger,进一步简化开发。 以上就是Quartz API的主要知识点,通过学习和理解这些内容,开发者可以充分...
4. **并发和线程管理**:Quartz支持多线程执行,书中会讲解如何处理并发问题,例如避免多个实例同时执行同一作业,以及如何调整线程池大小以优化性能。 5. **日志和监控**:学习如何集成日志框架,以便记录作业执行...
Spring提供了`FactoryBean`类,如`SchedulerFactoryBean`,用于创建和管理Quartz的`Scheduler`实例。这使得我们可以利用Spring的依赖注入(DI)和管理上下文来创建和控制Quartz的相关组件,如`Trigger`和`JobDetail`...
Job 类是执行实际任务的逻辑,需要实现 Quartz 的 `org.quartz.Job` 接口,并重写 `execute(JobExecutionContext context)` 方法。Spring 可以通过 AOP 将 Job 实例注入到 Spring 容器中,从而利用 Spring 的特性,...
开发者需要自定义Job类,并实现`org.quartz.Job`接口,覆盖`execute`方法来编写实际的业务逻辑。 2. **Trigger**:触发器决定了Job何时运行。常见的Trigger类型有SimpleTrigger(简单触发器)和CronTrigger(cron...
3. **创建Job类**:定义一个实现了`org.quartz.Job`接口的类,这个类代表一个具体的定时任务。在这个类中,重写`execute(JobExecutionContext context)`方法来实现任务逻辑。 ```java import org.quartz.Job; ...
Quartz是一个开源的作业调度框架,它允许程序创建和管理定时任务。在版本2.1.5中,Quartz引入了一些重要的改进和调整,使得它更加稳定和灵活,适用于大型和复杂的项目。在这个实例中,我们将深入探讨Quartz 2.1.5的...
3. 定义Job:创建Job类实现`org.quartz.Job`接口,定义具体要执行的任务逻辑。 4. 创建Trigger:定义Trigger来决定Job的执行时间,可以是SimpleTrigger(简单触发器)或CronTrigger(基于cron表达式的触发器)。 5. ...
在提供的文件中,“quartz的入门.doc”可能是Quartz的基础教程,介绍如何创建和调度Job;“spring的quartz应用.txt”可能包含Spring-Quartz的具体使用示例和注意事项;“spring-quartz-demo”可能是一个完整的示例...
Quartz的核心功能是创建、安排和执行Job(任务),这些Job可以是任何实现了`org.quartz.Job`接口的Java对象。Quartz通过Trigger来决定何时触发Job的执行。 在Quartz入门中,你需要了解以下几个关键概念: 1. **Job...