最近在项目中遇到了定时对账的需求,本来是打算用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.
分享到:
相关推荐
在IT行业中,构建高效、可扩展的Web应用是至关重要的,而"spring+springMVC+mybatis+quartz动态定时任务创建"就是一个常见的技术栈,用于实现这样的目标。这个组合充分利用了各组件的优势,提供了强大的后端服务支持...
本Demo以"基于SSM+quartz的定时任务管理"为主题,将展示如何在Spring、SpringMVC和MyBatis(SSM)框架基础上,集成Quartz作为调度引擎,实现高效灵活的定时任务管理。 **1. SSM框架简介** SSM是Spring、SpringMVC...
【标题】"C# quartz.net 定时任务源码 可以远程控制"涉及的核心知识点主要集中在C#编程语言、Quartz.NET库以及系统服务的安装与管理。Quartz.NET是一个开源的作业调度框架,它允许开发人员在.NET环境中创建和执行...
【C# Quartz.Net定时任务操作】Quartz.Net是一款强大的任务调度框架,广泛应用于C#环境下的定时任务管理。本文将详细介绍如何使用Quartz.Net进行定时任务的配置与执行。 首先,**通过Nuget安装框架**非常简单,只需...
在多应用服务器负载均衡环境下,Spring Quartz定时任务的重复执行问题是一个常见的挑战。Spring Quartz是一个强大的、开源的作业调度框架,允许开发者定义和执行复杂的定时任务。然而,当多个服务器实例并行运行时,...
【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...
Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...
Quartz是一款广泛使用的开源作业调度框架,它允许开发者在Java应用程序中定义和执行定时任务。在实际应用中,我们可能需要根据业务需求动态地配置定时任务的执行方式,例如,某些任务可能需要串行执行,而其他任务则...
当结合Quartz,一个强大的任务调度库,我们可以实现动态的定时任务创建,这在业务逻辑中有着广泛的应用,如数据同步、定时报表生成等。 **Spring框架** Spring框架是Java开发者必备的工具之一。它提供了一个统一的...
总的来说,"ssm集成quartz完成定时任务"是一个将企业级任务调度能力与Java Web开发相结合的实例,通过这个项目,开发者可以学习如何在SSM环境中有效地管理和执行定时任务,提升系统的自动化水平。
在IT行业中,定时任务是许多应用不可或缺的一部分,用于执行定期的后台处理,如数据同步、报表生成、清理任务等。Spring Boot作为一个轻量级的Java框架,提供了与各种定时任务库集成的能力,其中Quartz是一个广泛...
Quartz 是一个开源的作业调度框架,能够帮助开发者轻松地在 Java 应用程序中实现各种复杂的定时任务。它支持触发器(Trigger)、日历(Calendar)等功能,具有强大的扩展性和灵活性。 #### Quartz 动态定时任务原理...
总之,Quartz定时任务框架为Java开发者提供了一套灵活且功能强大的任务调度解决方案。通过理解其核心组件和API,我们可以方便地创建和管理各种定时任务,以满足各种业务需求。在这个简单的示例中,我们看到了如何每...
Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...
Quartz 是一个开源的作业调度框架,常用于Java应用程序中实现定时任务的管理。它提供了丰富的API和功能,使得开发者可以灵活地定义和控制任务的执行。本篇将重点介绍如何在Web环境中集成并使用Quartz,以及相关的...
在IT行业中,定时任务是许多应用的核心组成部分,用于在特定时间执行特定的业务逻辑。Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态...
Quartz 后台可动态配置的定时任务"项目提供了一个完整的解决方案,帮助开发者在SpringBoot环境中轻松管理定时任务,不仅能够满足基础的定时需求,还具备了后台动态调整的灵活性,对于需要频繁调整任务的企业级应用...
将Quartz.NET与TopShelf结合,我们可以在ASP.NET应用中创建一个后台服务,该服务可以独立于Web应用本身运行,负责处理定时任务。以下是实现步骤: 1. **安装依赖**:使用NuGet包管理器添加Quartz.NET和TopShelf的...
Quartz是一款功能强大的开源Java定时任务框架,常用于在企业级应用中实现定时调度任务。它允许开发者定义作业(Jobs)和触发器(Triggers),并由Scheduler负责管理和执行这些任务。Quartz的核心优势在于其灵活性和...
在探讨Quartz定时任务表达式的使用之前,我们先了解下Quartz是什么。Quartz是一个开源的作业调度框架,能够触发在指定时间运行的任务,广泛应用于Java应用程序中进行定时任务的管理。Quartz的核心是Cron表达式,它...