`

spring集成quartz,出现2次重复调用的问题

阅读更多

非web应用开发中,系统用Spring集成Quartz,也就是在Spring配置文件applicationContext.xml中配置Quartz,具体代码如下:

Xml代码 复制代码
  1. <!-- Quartz调度模块 -->  
  2. <bean id="callJobBean" class="iprai.quartz.CallJobBean" />  
  3.   
  4. <bean id="callJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  
  5.     <property name="targetObject">  
  6.         <ref bean="callJobBean" />  
  7.     </property>  
  8.     <property name="targetMethod">  
  9.         <value>executeInternal</value>  
  10.     </property>  
  11. </bean>  
  12.   
  13. <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">  
  14.     <property name="jobDetail">  
  15.         <ref bean="callJobDetail" />  
  16.     </property>  
  17.     <property name="cronExpression">  
  18.         <value>0 0/5 * * * ?</value>  
  19.     </property>  
  20. </bean>  
  21.   
  22. <bean id="schedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  
  23.     <property name="triggers">  
  24.         <list>  
  25.             <ref local="cronTrigger" />  
  26.         </list>  
  27.     </property>  
  28. </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时,代码如下:

Java代码 复制代码
  1. ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");   
  2. 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,也就是下面代码没有运行:

Java代码 复制代码
  1. Resource resource = new ClassPathResource("applicationContext-CallJob.xml");   
  2. BeanFactory factory = new XmlBeanFactory(resource);   
  3. 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了。

 

分享到:
评论
1 楼 cyz001 2011-09-01  
你加个判断,避免重复载入容器就行了

相关推荐

    spring java 定时器 执行两次 quartz

    下面将详细介绍如何使用Spring集成Quartz,以及解决定时任务重复执行的问题。 首先,让我们了解Spring如何配置Quartz。在Spring应用中添加Quartz支持,你需要在`pom.xml`或`build.gradle`文件中引入Quartz的依赖,...

    Spring集成Quartz调度框架.pdf

    以下是一个简单的示例,展示如何使用Spring集成Quartz来实现一个每5秒钟执行一次的任务: 1. **定义作业**:创建一个实现`org.quartz.Job`接口的类,编写具体的业务逻辑。 ```java public class MyJob ...

    Spring+Quartz2

    Spring 和 Quartz2 是两个在 Java 开发中广泛使用的框架,它们在企业级应用中承担着重要的角色。Spring 是一个全面的、开源的应用框架,而 Quartz2 是一个强大的、开源的作业调度库,常用于实现定时任务。下面我们将...

    spring quartz 时间调用框架

    **Spring Quartz时间调用框架详解** Spring Quartz是一个在Spring框架中集成的时间调度插件,它允许开发者方便地创建和管理定时任务。Quartz是Java领域的一款功能强大的作业调度库,而Spring通过其优秀的IoC...

    spring boot集成quartz定时器

    总结,Spring Boot集成Quartz定时器能够方便地创建和管理定时任务,同时利用Spring的依赖注入,使得Job可以灵活地调用其他服务或组件。这种方式使得我们的任务更加模块化和易于维护。在实际开发中,根据项目需求,...

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

    集成Quartz到Spring的过程中,主要涉及以下步骤: 1. 添加依赖:确保项目中引入了Spring和Quartz的相关库,包括`spring-context-support`和`quartz`。 2. 配置Scheduler:在Spring的配置文件中,使用`...

    spring的quartz使用实例

    2. **Spring整合Quartz的优势** - 简化配置:Spring通过`org.springframework.scheduling.quartz`包提供了对Quartz的封装,使得配置和管理Job、Trigger变得更加简洁。 - AOP支持:Spring能够利用其AOP(面向切面...

    spring-quartz定时设置详细说明

    二、Spring 集成 Quartz 1. 添加依赖:在 Maven 或 Gradle 项目中,需要引入 Spring 对 Quartz 的支持。添加相应的依赖库,例如: Maven: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-...

    spring整合quartz定时任务调度

    2. **配置Quartz**:在Spring的配置文件(如applicationContext.xml)中,声明Quartz的相关bean,包括`SchedulerFactoryBean`,它是Quartz与Spring集成的关键: ```xml &lt;bean id="schedulerFactoryBean" class="org....

    quartz整合springbatch动态集群定时实现mysql参考

    Quartz是一个开源的作业调度框架,允许开发者创建、调度和执行重复或一次性任务。它提供了灵活的时间表定义和多种触发器类型,如简单触发器、cron触发器等。Quartz与Spring的集成使得在Spring应用中管理任务变得更加...

    Spring Quartz集成

    【Spring Quartz集成】是将强大的Quartz定时任务调度框架与Spring框架进行整合,以实现更加灵活、方便的定时任务管理。Quartz是一个开源的作业调度框架,能够按预定的时间执行任务,而Spring作为企业级应用的Java...

    spring quartz 集群模式

    标题 "spring quartz 集群模式" 涉及到的是Spring框架与Quartz调度器在集群环境下的集成和配置。Quartz是一个开源任务调度框架,而Spring则提供了与Quartz的无缝集成,使得在Java应用中管理和执行定时任务变得更加...

    spring注解Quartz定时执行功能

    在Spring框架中集成Quartz库可以实现强大的定时任务管理功能。Quartz是一个开源的作业调度框架,它允许程序创建和管理任务,以便在特定时间自动执行。Spring通过其优秀的依赖注入(DI)和AOP(面向切面编程)特性,...

    spring-quartz jar包

    Spring Quartz 是一个集成Quartz定时任务框架与Spring的开源项目,它使得在Spring应用中配置和管理定时任务变得更加便捷。Quartz是Java平台上的一个强大、完全可移植的作业调度库,可以用来创建复杂的调度任务,而...

    spring+quartz需要的4个jar包 不需要6个

    标题提到“spring+quartz需要的4个jar包”,这意味着我们可以用最少的依赖来集成这两个库。通常,Spring和Quartz的集成会涉及以下关键的jar文件: 1. **Spring框架的核心库**:`spring-context.jar` - 这个jar包含...

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

    Spring提供了一种集成Quartz的方式,使得我们可以方便地在Spring应用中管理和执行定时任务。本篇将深入探讨如何在Spring中启动和停止Quartz定时器。 首先,我们需要理解Spring和Quartz的基本概念。Spring是一个强大...

    Spring中的Quartz配置-Spring-定时器-java定时器.doc

    Quartz 可以与 Spring 框架集成,以实现任务的定时执行。 Spring 中的 Quartz 配置 在 Spring 中,Quartz 的配置主要通过 XML 文件来实现。我们可以在 Spring 的配置文件中定义 Quartz 的 bean,以便实现任务的...

    spring-quartz简单实例

    Quartz是开源的,可扩展的,且与Spring框架完美集成,为应用提供了灵活且可靠的定时任务管理能力。在这个"spring-quartz简单实例"中,我们将探讨如何在Spring环境下配置和使用Quartz。 首先,我们需要引入Quartz和...

    maven_spring_quartz.rar

    《Spring集成Quartz实战解析》 在Java世界中,任务调度是常见的需求,例如定时执行数据清理、发送邮件等操作。Spring框架以其强大的整合能力,为开发者提供了与各种任务调度库集成的方案,其中Quartz是一款广泛应用...

    spring3整合quartz1.8和spring3整合quartz2.2两个版本示例

    - **事务管理**:当 Job 需要在事务环境中执行时,需要确保 Spring 事务管理与 Quartz 的集成正确。 - **错误处理**:合理处理 Job 执行异常,避免影响整个 Scheduler 的运行。 - **资源释放**:应用关闭时,确保...

Global site tag (gtag.js) - Google Analytics