1、下载quartz-2.2.2
2、创建数据库表
在数据库中建表。建表模版在Quartz包下quartz-2.2.2\docs\dbTables下,选择相应的数据库和版本
3、配置数据库连接池,如果spring已经配置则不需要再另行配置,只需在后面配置的spring-job.xml引入即可
3.1、配置数据库连接池
jdbc.properties
#jdbc jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/webdemo?useUnicode=true&characterEncoding=UTF8 jdbc.username=root jdbc.password=root123 c3p0.pool.size.max=10 c3p0.pool.size.min=2 c3p0.pool.size.ini=3 c3p0.pool.size.increment=2 #hibernate config hibernate.dialect=org.hibernate.dialect.MySQL5Dialect hibernate.hbm2ddl.auto=update hibernate.show_sql=true hibernate.format_sql=true #hibernate cache hibernate.cache.use_second_level_cache=true hibernate.cache.use_query_cache=true hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory hibernate.cache.provider_configuration_file_resource_path=ehcache.xml
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"> <!-- 加载配置文件 --> <context:property-placeholder location="classpath:jdbc.properties" /> <!-- 扫描service自动注入为bean --> <context:component-scan base-package="com.tzz.web,com.tzz.hessian.service,com.tzz.aop,com.tzz.job.springtask" /> <!-- 配置数据源 c3p0 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driver}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 请求超时时间 --> <property name="checkoutTimeout" value="30000" /> <!-- 每60秒检查所有连接池中的空闲连接。默认值: 0,不检查 --> <property name="idleConnectionTestPeriod" value="30" /> <!-- 连接数据库连接池最大空闲时间 --> <property name="maxIdleTime" value="30" /> <!-- 连接池初始化连接数 --> <property name="initialPoolSize" value="${c3p0.pool.size.ini}" /> <property name="minPoolSize" value="${c3p0.pool.size.min}" /> <property name="maxPoolSize" value="${c3p0.pool.size.max}" /> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 --> <property name="acquireIncrement" value="${c3p0.pool.size.increment}" /> </bean> </beans>
3.2、 配置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/webdemo?useUnicode=true&characterEncoding=UTF8 org.quartz.dataSource.qzDS.user = root org.quartz.dataSource.qzDS.password = root123 org.quartz.dataSource.qzDS.maxConnections = 30
说明:
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 秒)。
4、定义任务类
package com.tzz.job.quartz; import org.apache.log4j.Logger; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; /** * 通过extends QuartzJobBean 的方式 * */ public class EXQuartzJob extends QuartzJobBean { protected final transient Logger log = Logger.getLogger(EXQuartzJob.class); @SuppressWarnings("unused") private int timeout; @SuppressWarnings("unused") private static int i = 0; // 调度工厂实例化后,经过timeout时间开始执行调度 public void setTimeout(int timeout) { this.timeout = timeout; } @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { log.info("***Quartz定时任务执行中***通过extends QuartzJobBean 的方式***"); } }
spring-job.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"> <bean name="exQuartzJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="com.tzz.job.quartz.EXQuartzJob" /> <property name="jobDataAsMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean> <bean id="exQuartzJobCronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="exQuartzJob" /> <!-- 每5秒执行一次 --> <property name="cronExpression" value="0/10 * * * * ?" /> </bean> <!-- 配置调度工厂 --> <bean name="schedulerFactory" lazy-init="false" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!--集群配制start--> <property name="dataSource" ref="dataSource" /> <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/> <property name="configLocation" value="classpath:quartz.properties"/> <!-- 集群配制 end --> <property name="triggers"> <list> <ref bean="exQuartzJobCronTrigger" /> </list> </property> </bean> </beans>
测试:
public static void main(String[] args) { System.out.println("Test start."); @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); context.getBean("schedulerFactory"); System.out.print("Test end.."); }
相关推荐
java + quartz实现定时任务,实现集群配置,在集群环境下多节点运行定时Quartz定任务,就会存在重复处理任务的现象,为解决这一问题,下面我将介绍使用 Quartz 的 TASK ( 12 张表)实例化到数据库,基于数据库自动...
5. **集群配置**:为了实现高可用的Quartz集群,你需要配置多个节点共享同一个数据库存储的作业和触发器信息。Quartz支持多种持久化策略,如JDBC、RAMJobStore等,选择数据库存储能保证在集群中的任务状态一致性。 ...
总结起来,"Spring+Quartz定时集群支持"涉及到的知识点主要包括:Spring与Quartz的集成、Quartz的集群配置、`MethodInvokingJobDetailFactoryBean`的使用、数据库表的设计以及通过IHS等手段实现的任务调度。...
2. **配置Quartz**:在Spring的配置文件(如applicationContext.xml)中,定义Quartz的相关bean,包括SchedulerFactoryBean、JobDetail和Trigger。这些配置会告诉Quartz如何启动、何时运行以及运行哪些任务。 3. **...
在IT行业中,Spring框架是Java应用开发中的基石,而Quartz则是广泛...通过上述步骤,你已经掌握了Spring集成Quartz集群配置的基本概念。在实践中,根据具体需求调整配置,可以实现高效、稳定且可扩展的任务调度系统。
在Quartz集群中,多个Quartz服务器节点共享同一个作业和触发器的信息,当一个节点失败时,其他节点可以接管任务执行,确保服务的连续性。Quartz使用数据库存储作业和触发器的状态,实现集群间的同步。 4. **Spring...
2. 配置 Scheduler:在 Spring 配置文件中,设置 Quartz 的 SchedulerFactoryBean,指定数据库存储(如果需要持久化任务信息)和相关的配置属性。 3. 定义 Job 和 Trigger:创建 Quartz 作业类(Job),实现 org....
Spring通过`org.springframework.scheduling.quartz`包为Quartz提供了高级封装,简化了Quartz的配置和使用。以下是整合的步骤: 1. **引入依赖**:在项目中添加Quartz和Spring对Quartz的支持的依赖。如果是Maven...
Spring Boot + Quartz 集群搭建的完整步骤 Spring Boot 是一个流行的 Java 框架,用于快速构建基于 Spring 的应用程序。Quartz 是一个流行的开源作业调度框架,可以用于实现定时任务的调度。 Spring Boot + Quartz ...
Quartz支持从数据库存储作业和触发器,这样可以方便地进行任务的持久化和集群环境下的任务同步。 1. **Spring与Quartz的集成**:Spring提供了与Quartz的无缝集成,通过`Spring-Job`和`Spring-Trigger`接口,我们...
这些资源可能包括Quartz的Job类定义、Spring Boot的配置文件(application.properties或application.yml)、数据库模型和迁移脚本、以及用于演示动态管理任务的控制器和服务类代码。开发者可以研究这些文件,了解...
总结,Spring Quartz集群配置涉及到多个步骤,包括选择合适的Job Store、配置Spring集成、定义定时任务以及优化集群设置。正确配置后,我们可以获得高可用和可扩展的定时任务调度系统,满足大规模分布式系统的需求。
集成Quartz集群需要配置Quartz的集群模式,包括共享的数据存储(如数据库)、集群节点间的通信机制(如JDBC Job Store)以及对Job和Trigger的一致性处理。在实际应用中,可能会使用如ZooKeeper这样的分布式协调服务...
【Spring集成Quartz定时任务与数据库实现集群详解】 在企业级应用中,定时任务的管理是必不可少的一部分,Spring框架提供了与Quartz的集成,使得我们可以方便地创建和管理定时任务。Quartz是一款强大的、开放源代码...
2. **Spring配置**: 创建一个Spring配置文件,例如`quartz-context.xml`,配置Quartz Scheduler,声明`SchedulerFactoryBean`,并设置属性如`configLocation`指向`quartz.properties`文件,以及`...
3. 集群配置(clustered=true):在`quartz.properties`中启用集群模式。 4. 调度器监听器(SchedulerListeners):可以用来监控集群状态,处理节点失效等情况。 5. 任务的幂等性:设计任务时要考虑到可能会被多个...
在提供的压缩包"spring4+hibernate5+quartz2+hdfs.rar"中,可能包含了配置文件、Java源代码、数据库连接设置等,用户只需提供自己的JDBC连接信息,即可快速部署和运行这个整合系统。通过解压并研究这些文件,开发者...
1. **Quartz配置**:定义了调度器、作业和触发器的配置,可能使用了`org.springframework.scheduling.quartz.SchedulerFactoryBean`来初始化Quartz。 2. **Spring Batch配置**:包含了作业和步骤的定义,以及读取和...
Spring与Quartz的集成主要基于Spring的`TaskExecution`和`TaskScheduling`模块,它允许我们以声明式的方式配置定时任务,同时也支持编程式的任务调度。以下将详细介绍如何利用Spring和Quartz实现多任务的定时功能。 ...