• 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;
        }
    }
    

      

  • 相关阅读:
    【2020-02-13】内容变了,但计划本身没变
    【2020-02-12】新的工作计划方式
    【2020-02-10】煮饭那点家常
    【2020-02-10】生活需要不断地相互协调
    nacicat premium 快捷键
    python 爬虫之 正则的一些小例子
    Python爬虫之Cookie和Session
    Python爬虫之关于登录那些事
    爬虫常用库之pyquery 库
    day 39 jq 学习入门2
  • 原文地址:https://www.cnblogs.com/skyLogin/p/6915921.html
Copyright © 2020-2023  润新知