非web应用开发中,系统用Spring集成Quartz,也就是在Spring配置文件applicationContext.xml中配置Quartz,具体代码如下:
-
-
<bean id="callJobBean" class="iprai.quartz.CallJobBean" />
-
-
<bean id="callJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
-
<property name="targetObject">
-
<ref bean="callJobBean" />
-
</property>
-
<property name="targetMethod">
-
<value>executeInternal</value>
-
</property>
-
</bean>
-
-
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
-
<property name="jobDetail">
-
<ref bean="callJobDetail" />
-
</property>
-
<property name="cronExpression">
-
<value>0 0/5 * * * ?</value>
-
</property>
-
</bean>
-
-
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
-
<property name="triggers">
-
<list>
-
<ref local="cronTrigger" />
-
</list>
-
</property>
-
</bean>
<!-- Quartz调度模块 -->
<bean id="callJobBean" class="iprai.quartz.CallJobBean" />
<bean id="callJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="callJobBean" />
</property>
<property name="targetMethod">
<value>executeInternal</value>
</property>
</bean>
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="callJobDetail" />
</property>
<property name="cronExpression">
<value>0 0/5 * * * ?</value>
</property>
</bean>
<bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTrigger" />
</list>
</property>
</bean>
当我的系统启动时,会读取并实例化applicationContext.xml文件中的其他bean,出现的问题就是读取一次配置文件并实例化一个与Quartz不相关的bean时,代码如下:
- ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
-
RiddickMessage message = (RiddickMessage)ctx.getBean("message");
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
RiddickMessage message = (RiddickMessage)ctx.getBean("message");
Quartz就会相应地被调用一次,之前读取了多少次applicationContext.xml文件,运行时就会在Quartz设定的时间点重复执行相同次数的代码,也就是执行上面配置文件中的callJobBean对应的类中的executeInternal方法相同的次数,而且是同一个时间点,相当于配置了有多个一模一样的Job了。具体还没弄清楚是Spring到底是怎么自动实例化Quartz的,因为我都没有在代码中显式地实例化schedulerFactory这个bean,也就是下面代码没有运行:
- Resource resource = new ClassPathResource("applicationContext-CallJob.xml");
-
BeanFactory factory = new XmlBeanFactory(resource);
-
scheduler = (Scheduler) factory.getBean("schedulerFactory");
Resource resource = new ClassPathResource("applicationContext-CallJob.xml");
BeanFactory factory = new XmlBeanFactory(resource);
scheduler = (Scheduler) factory.getBean("schedulerFactory");
最后没办法,只得将applicationContext.xml文件中配置的Quartz代码移到另一个配置文件applicationContext-callJob.xml中,这样就避免了读取applicationContext.xml文件时自动实例化Quartz了。
分享到:
相关推荐
下面将详细介绍如何使用Spring集成Quartz,以及解决定时任务重复执行的问题。 首先,让我们了解Spring如何配置Quartz。在Spring应用中添加Quartz支持,你需要在`pom.xml`或`build.gradle`文件中引入Quartz的依赖,...
以下是一个简单的示例,展示如何使用Spring集成Quartz来实现一个每5秒钟执行一次的任务: 1. **定义作业**:创建一个实现`org.quartz.Job`接口的类,编写具体的业务逻辑。 ```java public class MyJob ...
Spring 和 Quartz2 是两个在 Java 开发中广泛使用的框架,它们在企业级应用中承担着重要的角色。Spring 是一个全面的、开源的应用框架,而 Quartz2 是一个强大的、开源的作业调度库,常用于实现定时任务。下面我们将...
**Spring Quartz时间调用框架详解** Spring Quartz是一个在Spring框架中集成的时间调度插件,它允许开发者方便地创建和管理定时任务。Quartz是Java领域的一款功能强大的作业调度库,而Spring通过其优秀的IoC...
总结,Spring Boot集成Quartz定时器能够方便地创建和管理定时任务,同时利用Spring的依赖注入,使得Job可以灵活地调用其他服务或组件。这种方式使得我们的任务更加模块化和易于维护。在实际开发中,根据项目需求,...
集成Quartz到Spring的过程中,主要涉及以下步骤: 1. 添加依赖:确保项目中引入了Spring和Quartz的相关库,包括`spring-context-support`和`quartz`。 2. 配置Scheduler:在Spring的配置文件中,使用`...
2. **Spring整合Quartz的优势** - 简化配置:Spring通过`org.springframework.scheduling.quartz`包提供了对Quartz的封装,使得配置和管理Job、Trigger变得更加简洁。 - AOP支持:Spring能够利用其AOP(面向切面...
二、Spring 集成 Quartz 1. 添加依赖:在 Maven 或 Gradle 项目中,需要引入 Spring 对 Quartz 的支持。添加相应的依赖库,例如: Maven: ```xml <groupId>org.springframework.boot <artifactId>spring-...
2. **配置Quartz**:在Spring的配置文件(如applicationContext.xml)中,声明Quartz的相关bean,包括`SchedulerFactoryBean`,它是Quartz与Spring集成的关键: ```xml <bean id="schedulerFactoryBean" class="org....
Quartz是一个开源的作业调度框架,允许开发者创建、调度和执行重复或一次性任务。它提供了灵活的时间表定义和多种触发器类型,如简单触发器、cron触发器等。Quartz与Spring的集成使得在Spring应用中管理任务变得更加...
【Spring Quartz集成】是将强大的Quartz定时任务调度框架与Spring框架进行整合,以实现更加灵活、方便的定时任务管理。Quartz是一个开源的作业调度框架,能够按预定的时间执行任务,而Spring作为企业级应用的Java...
标题 "spring quartz 集群模式" 涉及到的是Spring框架与Quartz调度器在集群环境下的集成和配置。Quartz是一个开源任务调度框架,而Spring则提供了与Quartz的无缝集成,使得在Java应用中管理和执行定时任务变得更加...
在Spring框架中集成Quartz库可以实现强大的定时任务管理功能。Quartz是一个开源的作业调度框架,它允许程序创建和管理任务,以便在特定时间自动执行。Spring通过其优秀的依赖注入(DI)和AOP(面向切面编程)特性,...
Spring Quartz 是一个集成Quartz定时任务框架与Spring的开源项目,它使得在Spring应用中配置和管理定时任务变得更加便捷。Quartz是Java平台上的一个强大、完全可移植的作业调度库,可以用来创建复杂的调度任务,而...
标题提到“spring+quartz需要的4个jar包”,这意味着我们可以用最少的依赖来集成这两个库。通常,Spring和Quartz的集成会涉及以下关键的jar文件: 1. **Spring框架的核心库**:`spring-context.jar` - 这个jar包含...
Spring提供了一种集成Quartz的方式,使得我们可以方便地在Spring应用中管理和执行定时任务。本篇将深入探讨如何在Spring中启动和停止Quartz定时器。 首先,我们需要理解Spring和Quartz的基本概念。Spring是一个强大...
Quartz 可以与 Spring 框架集成,以实现任务的定时执行。 Spring 中的 Quartz 配置 在 Spring 中,Quartz 的配置主要通过 XML 文件来实现。我们可以在 Spring 的配置文件中定义 Quartz 的 bean,以便实现任务的...
Quartz是开源的,可扩展的,且与Spring框架完美集成,为应用提供了灵活且可靠的定时任务管理能力。在这个"spring-quartz简单实例"中,我们将探讨如何在Spring环境下配置和使用Quartz。 首先,我们需要引入Quartz和...
《Spring集成Quartz实战解析》 在Java世界中,任务调度是常见的需求,例如定时执行数据清理、发送邮件等操作。Spring框架以其强大的整合能力,为开发者提供了与各种任务调度库集成的方案,其中Quartz是一款广泛应用...
- **事务管理**:当 Job 需要在事务环境中执行时,需要确保 Spring 事务管理与 Quartz 的集成正确。 - **错误处理**:合理处理 Job 执行异常,避免影响整个 Scheduler 的运行。 - **资源释放**:应用关闭时,确保...