`
michael.softtech
  • 浏览: 208468 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

quartz在定时任务中的应用

阅读更多

最近在项目中遇到了定时对账的需求,本来是打算用Timer来着,后来因为考虑到需求可能会进一步细化,比如从最初的每日一对变为每小时一对等等,觉得还是使用相对成熟的框架quartz比较好。下面就自己的使用过程中的一些经验做一些简单记录。

 

1. 在maven的pom.xml文件里面添加quartz的包依赖

        <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>1.8.0</version>
  </dependency>
  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-oracle</artifactId>
    <version>1.8.0</version>
  </dependency>

然后mvn install,下载相应的包

2.  在src/main/resouces下面添加quartz.properties文件。

     配置文件的详细配置就不说了,值得一提的是在配置文件里面加入了对任务持久化的

    支持:

   

org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
#org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.HSQLDBDelegate
org.quartz.jobStore.useProperties=false
org.quartz.jobStore.dataSource=XXX
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.isClustered=true
org.quartz.jobStore.clusterCheckinInterval=15000

3. 在spring的配置文件里面配置任务bean.

    首先说一下quartz实现定时任务的方式。quartz暴露给用户的角色大概有三个: Scheduler,Trigger,Task.

    Task就是要实现的任务,自定义的task需要实现QuartzJobBean接口。Trigger是触发器,通过制定特定的触发条件来  触发task;Scheduler是一个调度器,功能就是把触发器和任务绑定在一起。当然Trigger自身也可以有Job参数。同时,Scheduler还可以在运行时动态对task进行调度。

 

  下面就是我配置的一个调度:

 

<bean id="a" class="org.springframework.scheduling.quartz.JobDetailBean">
 		<property name="jobClass">
			<value>
				com.××
			</value>
		</property>
 		<property name="jobDataAsMap">
 			<map>
 				<entry key="c">
 					<ref bean="C" />
 				</entry>
 			</map>
 		</property>
 	</bean>
  
 	<bean id="b"
		class="org.springframework.scheduling.quartz.SimpleTriggerBean">
		<property name="jobDetail">
			<ref bean="a" />
		</property>
		<property name="startDelay">
			<value>9100</value>
		</property>
		<property name="repeatInterval">
			<value>9100</value>
		</property>
	</bean>
	 
	 <bean  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	  <property name="configLocation" value="classpath:quartz.properties"/> 
	    <property name="startupDelay" value="30"/>  
		<property name="triggers">
		<list>
		<ref local="b" />
		</list>
		</property>
	</bean>

 

   这样,只需要在任务里面写自己的业务代码就可以了。

   另外,我尝试了一下,按这种方式配置多个scheduler的情况下,如果在quartz.properties配置了线程池

   org.quartz.threadPool.threadCount = 8,那么每个scheduler都可以有8个单独的线程运行任务。

   但是在当前项目中,出于同步考虑,我希望每次只有一个线程在运行这个job.所以每个job都实现了StatefulJob接口,

   这个接口的意义如下:

     

/**
 * <p>
 * A marker interface for <code>{@link org.quartz.JobDetail}</code> s that
 * wish to have their state maintained between executions.
 * </p>
 * 
 * <p>
 * <code>StatefulJob</code> instances follow slightly different rules from
 * regular <code>Job</code> instances. The key difference is that their
 * associated <code>{@link JobDataMap}</code> is re-persisted after every
 * execution of the job, thus preserving state for the next execution. The
 * other difference is that stateful jobs are not allowed to execute
 * concurrently, which means new triggers that occur before the completion of
 * the <code>execute(xx)</code> method will be delayed.

 

    大抵看来,就两个作用。

    1. 在job的执行过程中保持JobDataMap里面的对象的状态,使得里面的对象在每一次执行过后都预持久化,以供

        下一次执行使用

    2. 防止多个线程同时执行某一job.

分享到:
评论

相关推荐

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

    在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...

    基于SSM+quartz的定时任务管理demo

    本Demo以"基于SSM+quartz的定时任务管理"为主题,将展示如何在Spring、SpringMVC和MyBatis(SSM)框架基础上,集成Quartz作为调度引擎,实现高效灵活的定时任务管理。 **1. SSM框架简介** SSM是Spring、SpringMVC...

    C# quartz.net 定时任务源码 可以远程控制

    【标题】"C# quartz.net 定时任务源码 可以远程控制"涉及的核心知识点主要集中在C#编程语言、Quartz.NET库以及系统服务的安装与管理。Quartz.NET是一个开源的作业调度框架,它允许开发人员在.NET环境中创建和执行...

    C# Quartz.Net定时任务操作明细、完整过程

    【C# Quartz.Net定时任务操作】Quartz.Net是一款强大的任务调度框架,广泛应用于C#环境下的定时任务管理。本文将详细介绍如何使用Quartz.Net进行定时任务的配置与执行。 首先,**通过Nuget安装框架**非常简单,只需...

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

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

    C# 控制台Quartz定时任务.doc

    【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...

    java quartz 定时任务

    Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...

    定时任务quartz实现分组串行并行动态配置

    Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...

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

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

    ssm集成quartz完成定时任务

    总的来说,"ssm集成quartz完成定时任务"是一个将企业级任务调度能力与Java Web开发相结合的实例,通过这个项目,开发者可以学习如何在SSM环境中有效地管理和执行定时任务,提升系统的自动化水平。

    Springboot整合Quartz实现定时任务数据库动态配置

    在IT行业中,定时任务是许多应用不可或缺的一部分,用于执行定期的后台处理,如数据同步、报表生成、清理任务等。Spring Boot作为一个轻量级的Java框架,提供了与各种定时任务库集成的能力,其中Quartz是一个广泛...

    quartz 动态执行定时任务

    Quartz 是一个开源的作业调度框架,能够帮助开发者轻松地在 Java 应用程序中实现各种复杂的定时任务。它支持触发器(Trigger)、日历(Calendar)等功能,具有强大的扩展性和灵活性。 #### Quartz 动态定时任务原理...

    Quartz定时任务框架

    总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...

    Quartz 定时任务web使用

    Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    在IT行业中,定时任务是许多应用的核心组成部分,用于在特定时间执行特定的业务逻辑。Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态...

    Springboot2-Quartz 后台可动态配置的定时任务

    Quartz 后台可动态配置的定时任务"项目提供了一个完整的解决方案,帮助开发者在SpringBoot环境中轻松管理定时任务,不仅能够满足基础的定时需求,还具备了后台动态调整的灵活性,对于需要频繁调整任务的企业级应用...

    ASP.NET使用Quartz.NET实现定时任务调度

    将Quartz.NET与TopShelf结合,我们可以在ASP.NET应用中创建一个后台服务,该服务可以独立于Web应用本身运行,负责处理定时任务。以下是实现步骤: 1. **安装依赖**:使用NuGet包管理器添加Quartz.NET和TopShelf的...

    使用Quartz执行定时任务

    Quartz是一款功能强大的开源Java定时任务框架,常用于在企业级应用中实现定时调度任务。它允许开发者定义作业(Jobs)和触发器(Triggers),并由Scheduler负责管理和执行这些任务。Quartz的核心优势在于其灵活性和...

    Quartz定时任务表达式

    在探讨Quartz定时任务表达式的使用之前,我们先了解下Quartz是什么。Quartz是一个开源的作业调度框架,能够触发在指定时间运行的任务,广泛应用于Java应用程序中进行定时任务的管理。Quartz的核心是Cron表达式,它...

Global site tag (gtag.js) - Google Analytics