`
Riddick
  • 浏览: 640211 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring集成Quartz出现重复调用问题的解决

阅读更多

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

	<!-- 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");

 

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");

 最后没办法,只得将applicationContext.xml文件中配置的Quartz代码移到另一个配置文件applicationContext-callJob.xml中,这样就避免了读取applicationContext.xml文件时自动实例化Quartz了。

 

1
1
分享到:
评论

相关推荐

    Spring集成Quartz调度框架.pdf

    ### Spring集成Quartz调度框架详解 #### 一、Quartz调度框架概述 Quartz是一个开源的、成熟的作业调度框架,其主要目标是在Java应用程序中提供简单而强大的作业调度能力。Quartz支持作业按时间间隔(如每天、每周...

    spring java 定时器 执行两次 quartz

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

    spring quartz 时间调用框架

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

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

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

    spring-quartz定时设置详细说明

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

    spring boot集成quartz定时器

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

    Spring+Quartz2

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

    spring的quartz使用实例

    Spring整合Quartz是一款常见的任务调度解决方案,它允许开发者在应用程序中安排定时任务的执行。Quartz是一个开源的作业调度框架,而Spring通过提供一个简洁的API使得与Quartz的集成变得简单。以下是对Spring整合...

    spring整合quartz定时任务调度

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

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

    Quartz与Spring的集成使得在Spring应用中管理任务变得更加容易,可以利用Spring的依赖注入和生命周期管理。 Spring Batch是一个用于处理大量数据的批处理框架。它提供了诸如事务管理、错误处理、读写器和处理器抽象...

    spring quartz 集群模式

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

    Spring Quartz集成

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

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

    在上面的例子中,我们定义了一个JobDetail,它的目标是调用`SomeService`的`executeTask`方法,然后设置了一个CronTrigger来决定何时触发这个Job。最后,我们创建了一个SchedulerFactoryBean来启动Quartz的调度器。 ...

    spring-quartz jar包

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

    spring注解Quartz定时执行功能

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

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

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

    Spring 集成 Quartz

    总的来说,Spring集成Quartz提供了一个强大且灵活的任务调度解决方案,使得开发者可以专注于任务的业务逻辑,而无需关心底层的调度细节。这极大地提高了开发效率,也使得应用的定时任务更加健壮和可控。

    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是一款广泛应用...

Global site tag (gtag.js) - Google Analytics