本示例基于spring quartz 1.6.5
1、创建数据库表
//在数据库中建表。建表模版在Quartz包下docs/dbTables下,选择相应的数据库和版本即可。
找到所需要的数据库对应的数据库表即可
2、 配置数据库连接池,如果spring已经配置则不需要再另行配置,只需在后面配置的applicationContext-quartz.xml引入即可。
applicationContext.xml:
<context:component-scan base-package="com.sundoctor"/>
<!-- 属性文件读入 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!-- 数据源定义,使用c3p0 连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="20" />
<property name="acquireIncrement" value="2" />
<property name="maxIdleTime" value="3600" />
<property name="idleConnectionTestPeriod" value="180"/>
<property name="automaticTestTable" value="C3P0TESTTABLE"/>
</bean>
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/lite_basic_db?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
jdbc.username=root
jdbc.password=123
3、 配置quartz.properties
org.quartz.scheduler.instanceName属性可为任何值,用在 JDBC JobStore 中来唯一标识实例,但是所有集群节点中必须相同。
org.quartz.scheduler.instanceId 属性为 AUTO即可,基于主机名和时间戳来产生实例 ID。
org.quartz.jobStore.class属性为 JobStoreTX,将任务持久化到数据中。因为集群中节点依赖于数据库来传播 Scheduler 实例的状态,你只能在使用 JDBC JobStore 时应用 Quartz 集群。这意味着你必须使用 JobStoreTX 或是 JobStoreCMT 作为 Job 存储;你不能在集群中使用 RAMJobStore。
org.quartz.jobStore.isClustered 属性为 true,你就告诉了 Scheduler 实例要它参与到一个集群当中。这一属性会贯穿于调度框架的始终,用于修改集群环境中操作的默认行为。
org.quartz.jobStore.clusterCheckinInterval 属性定义了Scheduler 实例检入到数据库中的频率(单位:毫秒)。Scheduler 检查是否其他的实例到了它们应当检入的时候未检入;这能指出一个失败的 Scheduler 实例,且当前 Scheduler 会以此来接管任何执行失败并可恢复的 Job。通过检入操作,Scheduler 也会更新自身的状态记录。clusterChedkinInterval 越小,Scheduler 节点检查失败的 Scheduler 实例就越频繁。默认值是 15000 (即15 秒)。
quartz.properties
#==============================================================
#Configure Main Scheduler Properties
#==============================================================
org.quartz.scheduler.instanceName = TestScheduler1
org.quartz.scheduler.instanceId = AUTO
#==============================================================
#Configure ThreadPool
#==============================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true
#==============================================================
#Configure JobStore
#==============================================================
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.maxMisfiresToHandleAtATime=10
org.quartz.jobStore.isClustered = true
org.quartz.jobStore.clusterCheckinInterval = 20000
# Using datasource
org.quartz.jobStore.dataSource = qzDS
#Define the datasource to use
org.quartz.dataSource.qzDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.qzDS.URL = jdbc:mysql://localhost:3306/lite_basic_db
org.quartz.dataSource.qzDS.user = root
org.quartz.dataSource.qzDS.password = 123
org.quartz.dataSource.qzDS.maxConnections = 30
4、 配置applicationContext-quartz.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
<property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
<property name="configLocation" value="classpath:quartz.properties"/>
<property name="triggers">
<list>
<ref bean="trigger1"/>
<ref bean="trigger2"/>
</list>
</property>
</bean>
<bean id="jobDetail1" class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="simpleService"/>
<property name="targetMethod" value="testMethod1"/>
<property name="shouldRecover" value="true"/>
</bean>
<bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail1"/>
<property name="cronExpression" value="0/5 * * ? * * *"/>
</bean>
<bean id="jobDetail2" class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="simpleService"/>
<property name="targetMethod" value="testMethod2"/>
<property name="shouldRecover" value="true"/>
</bean>
<bean id="trigger2" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail" ref="jobDetail2"/>
<property name="startDelay" value="1"/>
<property name="repeatCount" value="100"/>
<property name="repeatInterval" value="1000"/>
</bean>
</beans>
5、 配置Job任务注意:加入定时任务有两种方式:
① 继承QuartzJobBean的类,重写executeInternal(),详细写法:
//类信息
public class SimpleService implements Serializable{
private static final long serialVersionUID = 122323233244334343L;
private static final Logger logger = LoggerFactory.getLogger(SimpleService.class);
public void testMethod1(){
logger.info("testMethod1.......1");
}
public void testMethod2(){
logger.info("testMethod2.......2");
}
}
//配置信息
<bean id="jobDetail1" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass">
<value>继承QuartzJobBean的类的引用,如果不继承QuartzJobBean可以参考 http://www.javaeye.com/topic/486055</value>
</property>
</bean>
② 用org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean指定类和方法,但是直接使用会报java.io.NotSerializableException异常,一般用网上流传的(需要将两个类copy到自己的工程下,要有springJAR包,Job需要持久化到数据库中,SimpleService必须实现Serializable)frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean,可以参考: http://jira.springframework.org/browse/SPR-3797。详细写法:
<bean id="jobDetail1" class="frameworkx.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="simpleService"/>
<property name="targetMethod" value="testMethod1"/>
<property name="shouldRecover" value="true"/>
</bean>
6、启动测试
ApplicationContext springContext = new
ClassPathXmlApplicationContext(new
String[]{"classpath:applicationContext.xml","classpath:applicationContext-quartz.xml"});
启动服务后,spring quartz会将trigger持久化到数据库中
相关文档:http://dl.iteye.com/topics/download/fb709c8c-edab-3ed4-9898-e3e86deea379
参数网址:http://blog.csdn.net/lifetragedy/article/details/6212831
http://www.blogjava.net/freeman1984/archive/2012/05/11/377882.html
分享到:
相关推荐
在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛...通过上述步骤,你已经掌握了Spring集成Quartz集群配置的基本概念。在实践中,根据具体需求调整配置,可以实现高效、稳定且可扩展的任务调度系统。
java + quartz实现定时任务,实现集群配置,在集群环境下多节点运行定时Quartz定任务,就会存在重复处理任务的现象,为解决这一问题,下面我将介绍使用 Quartz 的 TASK ( 12 张表)实例化到数据库,基于数据库自动...
2. **集群配置**:配置每个节点的`org.quartz.scheduler.instanceId`为自动获取(`AUTO`),这样Quartz会根据机器的唯一标识自动生成实例ID。 3. **共享状态**:确保所有节点都连接到同一个数据库,并且有相同的...
5. **集群配置**:为了实现高可用的Quartz集群,你需要配置多个节点共享同一个数据库存储的作业和触发器信息。Quartz支持多种持久化策略,如JDBC、RAMJobStore等,选择数据库存储能保证在集群中的任务状态一致性。 ...
Spring可以帮助简化Quartz的集成和集群配置。 首先,我们需要在Spring配置文件中定义Quartz的Job和Trigger。`MethodInvokingJobDetailFactoryBean`是一个Spring提供的工厂bean,用于创建一个Job实例,该Job将调用...
Quartz的集群配置是另一个重要的话题。在高可用性环境中,我们可能需要配置多个Quartz实例以实现任务的冗余和负载均衡。这涉及到`org.quartz.jobStore`属性的设置,例如选择支持集群的数据存储(如JDBCJobStore),...
总的来说,Spring集成Quartz集群配置是一个涉及到多个组件协同工作的过程,包括Spring容器、Quartz调度器、数据库存储以及集群间的通信。正确配置和使用这些元素可以构建出一个稳定、高可用的定时任务系统。在实际...
1. **Quartz配置**:定义了调度器、作业和触发器的配置,可能使用了`org.springframework.scheduling.quartz.SchedulerFactoryBean`来初始化Quartz。 2. **Spring Batch配置**:包含了作业和步骤的定义,以及读取和...
3. **监控和管理**: 实现对Quartz集群的监控,如任务状态、运行时性能等,以便及时发现和解决问题。 总结,Quartz+Spring的分布式集群调度方案能够帮助开发者构建稳定且可扩展的定时任务系统。通过合理配置和实践,...
Quartz2.2.1是其一个版本,提供了丰富的功能和优化,包括集群支持、灵活的调度策略以及与Spring框架的深度集成。本文将详细介绍如何在Spring环境中使用注解方式配置Quartz。 1. **引入依赖** 在项目中,你需要引入...
【Spring集成Quartz定时任务与数据库实现集群详解】 在企业级应用中,定时任务的管理是必不可少的一部分,Spring框架提供了与Quartz的集成,使得我们可以方便地创建和管理定时任务。Quartz是一款强大的、开放源代码...
这个压缩包“Spring Quartz动态配置时间.rar”包含的PDF文档很可能是关于如何在Spring框架中使用Quartz进行动态配置时间的详细教程。下面将详细介绍Spring集成Quartz进行动态任务调度的相关知识点。 1. **Quartz...
- 考虑使用监控工具(如Prometheus+Grafana)监控Quartz集群的运行状态,以便及时发现和解决问题。 通过以上知识点的学习和实践,开发者可以熟练掌握在Spring环境中使用Quartz实现分布式集群的作业调度,提升系统...
通过集群配置,可以在多台服务器上共享任务调度,提高系统的可用性和可靠性。 7. **监控和管理**:Spring Quartz提供了Web管理界面(如`QuartzAdmin`),可以通过Web界面查看和操作任务调度,包括启动、停止、暂停...
至于博文链接中的内容,虽然无法直接查看,但通常会包含如何在实际项目中设置Quartz集群和Spring Data集成的详细步骤,包括配置示例、代码示例以及可能遇到的问题和解决方案。 在使用过程中,可能会遇到如任务并发...
Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup Language)配置文件,使得配置更加直观和灵活。以下将详细介绍如何在Spring Boot应用中使用YAML文件配置Quartz定时任务,以及...
总结起来,"Spring+Quartz定时集群支持"涉及到的知识点主要包括:Spring与Quartz的集成、Quartz的集群配置、`MethodInvokingJobDetailFactoryBean`的使用、数据库表的设计以及通过IHS等手段实现的任务调度。...