quartz 持久化 数据库表

此处只包括配置数据库操作

 


quartz 持久化数据库表格字段解释建表,SQL语句在dbTables文件夹中可以找到,介绍下我们开发主要使用到的表: (版本不一样,可能数据库表也不一样,这里使用2.2.1)

1、QRTZ_JOB_DETAILS:存储的是job的详细信息,包括:[DESCRIPTION]描述,[IS_DURABLE]是否持久化,[JOB_DATA]持久化对象等基本信息。

2、QRTZ_TRIGGERS:触发器信息,包含:job的名,组外键,[DESCRIPTION]触发器的描述等基本信息,还有[START_TIME]开始执行时间,[END_TIME]结束执行时间,[PREV_FIRE_TIME]上次执行时间,[NEXT_FIRE_TIME]下次执行时间,[TRIGGER_TYPE]触发器类型:simple和cron,[TRIGGER_STATE]执行状态:WAITING,PAUSED,ACQUIRED分别为:等待,暂停,运行中。

3、QRTZ_CRON_TRIGGERS:保存cron表达式。

4、QRTZ_SCHEDULER_STATE:存储集群中note实例信息,quartz会定时读取该表的信息判断集群中每个实例的当前状态,INSTANCE_NAME:之前配置文件中org.quartz.scheduler.instanceId配置的名字,就会写入该字段,如果设置为AUTO,quartz会根据物理机名和当前时间产生一个名字。  [LAST_CHECKIN_TIME]上次检查时间,[CHECKIN_INTERVAL]检查间隔时间。

5、QRTZ_PAUSED_TRIGGER_GRPS:暂停的任务组信息。

6、QRTZ_LOCKS,悲观锁发生的记录信息。

7、QRTZ_FIRED_TRIGGERS,正在运行的触发器信息。

8、QRTZ_SIMPLE_TRIGGERS,简单的出发器详细信息。

9、QRTZ_BLOB_TRIGGERS,触发器存为二进制大对象类型(用于Quartz用户自己触发数据库定制自己的触发器,然而JobStore不明白怎么存放实例的时候)。

 

 quartz.properties

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#

org.quartz.scheduler.instanceName= DefaultQuartzScheduler
org.quartz.scheduler.rmi.export= false
org.quartz.scheduler.rmi.proxy= false
org.quartz.scheduler.wrapJobExecutionInUserTransaction= false

org.quartz.threadPool.class= org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount= 10
org.quartz.threadPool.threadPriority= 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread= true

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.dataSource = qzDS org.quartz.dataSource.qzDS.driver= net.sourceforge.jtds.jdbc.Driver org.quartz.dataSource.qzDS.URL = jdbc:jtds:sqlserver://localhost:1433/quartz org.quartz.dataSource.qzDS.user= sa org.quartz.dataSource.qzDS.password= 1234 org.quartz.dataSource.qzDS.maxConnections = 30 #org.quartz.jobStore.selectWithLockSQL=select * from {0}LOCKS UPDLOCK WHERE LOCK_NAME=?

  

整合SpringMVC:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<!-- 导入数据库配置 --> <import resource="spring-datasources.xml"/>
   <!-- 配置job可使用springmvc bean --> <bean id="jobFactory" class="com.ice.quartz.factory.JobFactory"></bean>
<bean id="jobRecordListener" class="com.ice.quartz.listener.JobRecordListener" /> <bean id="triggerRecordListener" class="com.ice.quartz.listener.TriggerRecordListener" /> <bean id="DefaultQuartzScheduler" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="dataSource" ref="defaultDataSource"/> <property name="configLocation" value="classpath:quartz.properties" /> <property name="jobFactory" ref="jobFactory"></property> <property name="triggers"> <list> <ref bean="hourTrigger"></ref> <ref bean="dayTrigger"></ref> <ref bean="weekTrigger"></ref> <ref bean="monthTrigger"></ref> <ref bean="quarterTrigger"></ref> <ref bean="yearTrigger"></ref> </list> </property>
     <!-- 使用注入方式使用springMVC bean --> <property name="schedulerContextAsMap"> <map> <entry key="jobTriggerRecordMapper" value-ref="jobTriggerRecordMapper"></entry> </map> </property> <property name="globalJobListeners" ref="jobRecordListener"></property> <property name="globalTriggerListeners" ref="triggerRecordListener"></property> </bean> </beans>

  

配置job可使用springmvc bean 
package com.ice.quartz.factory;

import org.quartz.spi.TriggerFiredBundle;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.scheduling.quartz.SpringBeanJobFactory;

/**
 * @author sky
 * @version 1.0
 * @since 4.0
 */
public class JobFactory extends SpringBeanJobFactory implements ApplicationContextAware {
    private ApplicationContext applicationContext;

    @Override
    protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
        Object jobInstance = super.createJobInstance(bundle);
        applicationContext.getAutowireCapableBeanFactory().autowireBean(jobInstance);
        return jobInstance;
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

  

转载于:https://www.cnblogs.com/skyLogin/p/6915921.html

### 回答1: Quartz是一种广泛使用的开源调度器,可用于安排和执行重复的任务。它可以持久化数据库中以保证调度任务的持久化和可靠性。 要将Quartz持久化数据库中,需要配置Quartz的数据存储设置。具体步骤如下: 1. 首先,需要在项目中添加Quartz相关依赖库。 2. 然后,在Quartz的配置文件中指定要使用的数据存储方式。这可以通过设置以下属性来完成: ``` org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource = myDS org.quartz.jobStore.tablePrefix = QRTZ_ ``` 这些属性指定了使用JDBC JobStore来管理Quartz作业,以及使用指定的数据源和前缀。 3. 接下来,需要在项目中配置数据源。这可以通过在项目的配置文件中添加以下内容来完成: ``` <bean id="myDS" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/quartz"/> <property name="username" value="root"/> <property name="password" value=""/> <property name="maxActive" value="100"/> <property name="maxIdle" value="30"/> </bean> ``` 这将创建一个基本的数据源,以连接到MySQL数据库,并指定要使用的用户名和密码。 4. 最后,需要在Quartz的配置文件中设置以下属性,以启用持久化: ``` org.quartz.jobStore.isClustered = false org.quartz.jobStore.useProperties = false org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate ``` 这些属性将启用持久化,并指定Quartz的一些行为,例如任务执行延迟和驱动程序代理类。 完成上述步骤后,Quartz就会将作业和触发器存储在指定的数据库中,以便在应用程序重新启动时继续执行。 ### 回答2: Quartz是一个开源的任务调度框架,可以实现定时任务的管理和执行。对于需要持久化数据库的任务,Quartz提供了一种方便的方式来实现。 首先,我们需要创建一个数据库来存储Quartz相关信息,例如任务名称、任务分组、触发器类型、任务描述、触发器达式等。可以使用SQL脚本来创建这个,也可以使用Quartz提供的API来自动创建。 在Quartz的配置文件中,我们需要指定数据库相关信息。这个配置文件可以是一个.properties文件或者一个.xml文件。其中,我们需要配置数据库的连接信息,例如数据库的URL、用户名和密码。还需要配置Quartz使用的数据库驱动程序。 在任务调度的代码中,我们可以使用Quartz提供的API来创建和管理任务。首先,我们需要创建一个Job类来定义要执行的任务。然后,创建一个JobDetail对象,并指定要执行的Job类。接下来,创建一个触发器(Trigger)对象,并设置触发器的相关属性,例如触发时间、重复次数等。 在Quartz的配置文件中,我们还可以配置任务调度的相关策略,例如任务调度的线程池大小、任务触发器的优先级、任务的持久化等。通过设置任务的持久化为true,Quartz会将任务的相关信息持久化数据库中。 当我们启动Quartz的任务调度器时,Quartz会根据配置的触发器信息,自动调度和执行任务。执行过程中,Quartz会将任务的相关执行信息存储到数据库中。这些信息包括任务的执行时间、执行状态、执行结果等。 通过Quartz持久化功能,我们可以保证即使在应用程序重启或者服务器宕机的情况下,定时任务仍然能够准确地执行。这对于一些重要的定时任务来说非常关键,可以提高系统的可靠性和稳定性。 ### 回答3: Quartz是一个开源的作业调度框架,它允许开发人员在Java应用程序中配置和管理作业的执行。Quartz持久化功能允许将作业和调度信息保存到数据库中,以确保在应用程序重启或故障恢复后作业可以正确地继续执行。 在Quartz持久化过程中,主要涉及到两个核心概念:作业存储和触发器存储。 作业存储是用于存储作业相关信息的数据库,包括作业名称、作业组、作业类、作业描述等。通过将作业信息存储到数据库中,可以确保即使应用程序停止运行,作业的配置信息仍然可以保留。 触发器存储是用于存储触发器相关信息的数据库,包括触发器名称、触发器组、触发器类型、触发器运行时间等。通过将触发器信息存储到数据库中,可以确保触发器的调度信息可以被恢复,从而保证作业能够按照预定的时间和频率执行。 Quartz提供了多种数据库持久化方案,包括使用JDBC进行持久化、使用JPA进行持久化等。开发人员可以根据自己的需求选择最适合的方案进行配置。 此外,Quartz还提供了相应的API和工具,使得将作业和触发器信息持久化数据库中变得简单和方便。开发人员可以通过编写代码或者配置文件来实现持久化相关功能。 总之,Quartz持久化功能可以确保作业和调度信息能够持久保存到数据库中,从而保证在应用程序重启或故障恢复后作业可以正确地继续执行。这样可以提高应用程序的可靠性和稳定性,同时也提供了方便的管理和配置方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值