• spring quartz分布式任务计划


    spring quartz分布式任务计划

    环境:

    通过maven管理的spring mvc工程,且已经成功连接数据库。

    数据库表结构

    /*Table structure for table `qrtz_calendars` */
    
    DROP TABLE IF EXISTS `qrtz_calendars`;
    
    CREATE TABLE `qrtz_calendars` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `CALENDAR_NAME` varchar(200) NOT NULL,
      `CALENDAR` blob NOT NULL,
      PRIMARY KEY (`SCHED_NAME`,`CALENDAR_NAME`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_fired_triggers` */
    
    DROP TABLE IF EXISTS `qrtz_fired_triggers`;
    
    CREATE TABLE `qrtz_fired_triggers` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `ENTRY_ID` varchar(95) NOT NULL,
      `TRIGGER_NAME` varchar(200) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      `INSTANCE_NAME` varchar(200) NOT NULL,
      `FIRED_TIME` bigint(13) NOT NULL,
      `SCHED_TIME` bigint(13) NOT NULL,
      `PRIORITY` int(11) NOT NULL,
      `STATE` varchar(16) NOT NULL,
      `JOB_NAME` varchar(200) DEFAULT NULL,
      `JOB_GROUP` varchar(200) DEFAULT NULL,
      `IS_NONCONCURRENT` varchar(1) DEFAULT NULL,
      `REQUESTS_RECOVERY` varchar(1) DEFAULT NULL,
      PRIMARY KEY (`SCHED_NAME`,`ENTRY_ID`),
      KEY `IDX_QRTZ_FT_TRIG_INST_NAME` (`SCHED_NAME`,`INSTANCE_NAME`),
      KEY `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` (`SCHED_NAME`,`INSTANCE_NAME`,`REQUESTS_RECOVERY`),
      KEY `IDX_QRTZ_FT_J_G` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),
      KEY `IDX_QRTZ_FT_JG` (`SCHED_NAME`,`JOB_GROUP`),
      KEY `IDX_QRTZ_FT_T_G` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      KEY `IDX_QRTZ_FT_TG` (`SCHED_NAME`,`TRIGGER_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_job_details` */
    
    DROP TABLE IF EXISTS `qrtz_job_details`;
    
    CREATE TABLE `qrtz_job_details` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `JOB_NAME` varchar(200) NOT NULL,
      `JOB_GROUP` varchar(200) NOT NULL,
      `DESCRIPTION` varchar(250) DEFAULT NULL,
      `JOB_CLASS_NAME` varchar(250) NOT NULL,
      `IS_DURABLE` varchar(1) NOT NULL,
      `IS_NONCONCURRENT` varchar(1) NOT NULL,
      `IS_UPDATE_DATA` varchar(1) NOT NULL,
      `REQUESTS_RECOVERY` varchar(1) NOT NULL,
      `JOB_DATA` blob,
      PRIMARY KEY (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),
      KEY `IDX_QRTZ_J_REQ_RECOVERY` (`SCHED_NAME`,`REQUESTS_RECOVERY`),
      KEY `IDX_QRTZ_J_GRP` (`SCHED_NAME`,`JOB_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_locks` */
    
    DROP TABLE IF EXISTS `qrtz_locks`;
    
    CREATE TABLE `qrtz_locks` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `LOCK_NAME` varchar(40) NOT NULL,
      PRIMARY KEY (`SCHED_NAME`,`LOCK_NAME`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_paused_trigger_grps` */
    
    DROP TABLE IF EXISTS `qrtz_paused_trigger_grps`;
    
    CREATE TABLE `qrtz_paused_trigger_grps` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      PRIMARY KEY (`SCHED_NAME`,`TRIGGER_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_scheduler_state` */
    
    DROP TABLE IF EXISTS `qrtz_scheduler_state`;
    
    CREATE TABLE `qrtz_scheduler_state` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `INSTANCE_NAME` varchar(200) NOT NULL,
      `LAST_CHECKIN_TIME` bigint(13) NOT NULL,
      `CHECKIN_INTERVAL` bigint(13) NOT NULL,
      PRIMARY KEY (`SCHED_NAME`,`INSTANCE_NAME`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    DROP TABLE IF EXISTS `qrtz_blob_triggers`;
    
    CREATE TABLE `qrtz_blob_triggers` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `TRIGGER_NAME` varchar(200) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      `BLOB_DATA` blob,
      PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      KEY `SCHED_NAME` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      CONSTRAINT `qrtz_blob_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_cron_triggers` */
    
    DROP TABLE IF EXISTS `qrtz_cron_triggers`;
    
    CREATE TABLE `qrtz_cron_triggers` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `TRIGGER_NAME` varchar(200) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      `CRON_EXPRESSION` varchar(120) NOT NULL,
      `TIME_ZONE_ID` varchar(80) DEFAULT NULL,
      PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_simple_triggers` */
    
    DROP TABLE IF EXISTS `qrtz_simple_triggers`;
    
    CREATE TABLE `qrtz_simple_triggers` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `TRIGGER_NAME` varchar(200) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      `REPEAT_COUNT` bigint(7) NOT NULL,
      `REPEAT_INTERVAL` bigint(12) NOT NULL,
      `TIMES_TRIGGERED` bigint(10) NOT NULL,
      PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      CONSTRAINT `qrtz_simple_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_simprop_triggers` */
    
    DROP TABLE IF EXISTS `qrtz_simprop_triggers`;
    
    CREATE TABLE `qrtz_simprop_triggers` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `TRIGGER_NAME` varchar(200) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      `STR_PROP_1` varchar(512) DEFAULT NULL,
      `STR_PROP_2` varchar(512) DEFAULT NULL,
      `STR_PROP_3` varchar(512) DEFAULT NULL,
      `INT_PROP_1` int(11) DEFAULT NULL,
      `INT_PROP_2` int(11) DEFAULT NULL,
      `LONG_PROP_1` bigint(20) DEFAULT NULL,
      `LONG_PROP_2` bigint(20) DEFAULT NULL,
      `DEC_PROP_1` decimal(13,4) DEFAULT NULL,
      `DEC_PROP_2` decimal(13,4) DEFAULT NULL,
      `BOOL_PROP_1` varchar(1) DEFAULT NULL,
      `BOOL_PROP_2` varchar(1) DEFAULT NULL,
      PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      CONSTRAINT `qrtz_simprop_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    /*Table structure for table `qrtz_triggers` */
    
    DROP TABLE IF EXISTS `qrtz_triggers`;
    
    CREATE TABLE `qrtz_triggers` (
      `SCHED_NAME` varchar(120) NOT NULL,
      `TRIGGER_NAME` varchar(200) NOT NULL,
      `TRIGGER_GROUP` varchar(200) NOT NULL,
      `JOB_NAME` varchar(200) NOT NULL,
      `JOB_GROUP` varchar(200) NOT NULL,
      `DESCRIPTION` varchar(250) DEFAULT NULL,
      `NEXT_FIRE_TIME` bigint(13) DEFAULT NULL,
      `PREV_FIRE_TIME` bigint(13) DEFAULT NULL,
      `PRIORITY` int(11) DEFAULT NULL,
      `TRIGGER_STATE` varchar(16) NOT NULL,
      `TRIGGER_TYPE` varchar(8) NOT NULL,
      `START_TIME` bigint(13) NOT NULL,
      `END_TIME` bigint(13) DEFAULT NULL,
      `CALENDAR_NAME` varchar(200) DEFAULT NULL,
      `MISFIRE_INSTR` smallint(2) DEFAULT NULL,
      `JOB_DATA` blob,
      PRIMARY KEY (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`),
      KEY `IDX_QRTZ_T_J` (`SCHED_NAME`,`JOB_NAME`,`JOB_GROUP`),
      KEY `IDX_QRTZ_T_JG` (`SCHED_NAME`,`JOB_GROUP`),
      KEY `IDX_QRTZ_T_C` (`SCHED_NAME`,`CALENDAR_NAME`),
      KEY `IDX_QRTZ_T_G` (`SCHED_NAME`,`TRIGGER_GROUP`),
      KEY `IDX_QRTZ_T_STATE` (`SCHED_NAME`,`TRIGGER_STATE`),
      KEY `IDX_QRTZ_T_N_STATE` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),
      KEY `IDX_QRTZ_T_N_G_STATE` (`SCHED_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),
      KEY `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`,`NEXT_FIRE_TIME`),
      KEY `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`,`TRIGGER_STATE`,`NEXT_FIRE_TIME`),
      KEY `IDX_QRTZ_T_NFT_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`),
      KEY `IDX_QRTZ_T_NFT_ST_MISFIRE` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_STATE`),
      KEY `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (`SCHED_NAME`,`MISFIRE_INSTR`,`NEXT_FIRE_TIME`,`TRIGGER_GROUP`,`TRIGGER_STATE`),
      CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    

    pom.xml配置文件

    pom.xml中定义版本信息

    <!-- 定义版本 -->
    <properties>
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      <java.version>1.7</java.version>
      <org.springframework.version>4.2.5.RELEASE</org.springframework.version>
      <quartz.version>2.2.2</quartz.version>
      <servlet.version>3.1.0</servlet.version>
      <jsp.version>2.2</jsp.version>
      <jstl.version>1.2</jstl.version>
      <druid.version>1.0.20</druid.version>
      <mysql-connector-java.version>5.1.38</mysql-connector-java.version>
      <slf4j.version>1.7.19</slf4j.version>
    </properties>
    

    pom.xml中添加quartz管理

    <!-- quartz定时任务 begin -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>${quartz.version}</version>
        <exclusions>
            <exclusion>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz-jobs</artifactId>
        <version>${quartz.version}</version>
    </dependency>
    <!-- quartz定时任务 end -->
    

    任务计划执行类

    package com.quartz.task.job;
    
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.scheduling.quartz.QuartzJobBean;
    
    import java.util.Calendar;
    
    /**
     * 类名:TaskOneJob<br>
     * 描述:<br>
     * 创建人:zhangzhiqiang<br>
     * 创建时间:2016/9/12 13:30<br>
     *
     * @version v1.0
     */
    
    public class TaskOneJob extends QuartzJobBean {
    
        Logger logger = LoggerFactory.getLogger(TaskOneJob.class);
    
        protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
    
            logger.info("---------TaskOneJob----------->>>>" + Calendar.getInstance().getTimeInMillis());
            System.out.println("---------TaskOneJob----------->>>>" + Calendar.getInstance().getTimeInMillis());
    
        }
    }
    

    任务计划和集群配置文件

    resource目录下添加applicationContext-task.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
        <description>spring任务调度,quartz任务调度</description>
    
        <task:annotation-driven executor="quartzTaskExecutor" />
        <task:executor id="quartzTaskExecutor" keep-alive="900" pool-size="10" queue-capacity="20" />
    
        <!-- Quartz集群Schduler -->
        <bean id="clusterQuartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
            <!-- Triggers集成 -->
            <property name="triggers">
                <list>
                    <ref bean="taskOneJobTrigger" />
                </list>
            </property>
            <!-- quartz配置文件路径, 指向cluster配置 -->
            <property name="configLocation" value="classpath:quartz-cluster.properties" />
            <!-- 启动时延期2秒开始任务 -->
            <property name="startupDelay" value="2" />
            <!-- 保存Job数据到数据库所需的数据源 -->
            <property name="dataSource" ref="dataSource" />
            <!-- Job接受applicationContext的成员变量名 -->
            <property name="applicationContextSchedulerContextKey" value="applicationContext" />
            <!-- 修改job时,更新到数据库 -->
            <property name="overwriteExistingJobs" value="true" />
        </bean>
    
        <!-- 定时任务 -->
        <bean id="taskOneJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
            <property name="jobDetail" ref="taskOneJobDetail" />
            <!-- 每5秒执行一次 -->
            <property name="cronExpression" value="*/5 * * * * ? " />
        </bean>
        <bean id="taskOneJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
            <property name="durability" value="true" />
            <property name="jobClass" value="com.quartz.task.job.TaskOneJob" />
        </bean>
    </beans>
    

    resource目录下添加进群配置文件quartz-cluster.properties

    #============================================================================
    # Configure Main Scheduler Properties
    #============================================================================
    
    org.quartz.scheduler.instanceName = ClusteredScheduler
    org.quartz.scheduler.instanceId = AUTO
    org.quartz.scheduler.skipUpdateCheck = true
    
    #============================================================================
    # Configure ThreadPool
    #============================================================================
    
    org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 10
    org.quartz.threadPool.threadPriority = 5
    
    #============================================================================
    # 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.useProperties = false
    org.quartz.jobStore.tablePrefix = QRTZ_
    
    org.quartz.jobStore.isClustered = true
    org.quartz.jobStore.clusterCheckinInterval =15000
    

    测试

    最后启动程序,看配置是否正确。如果运行正确会输出如下类似结果:

    信息: Deployment of web application directory D:softapache-tomcat-7.0.65webappsmanager has finished in 135 ms
    ---------TaskOneJob----------->>>>1473662280157
    ---------TaskOneJob----------->>>>1473662285083
    ---------TaskOneJob----------->>>>1473662290072
    ---------TaskOneJob----------->>>>1473662295058
    
  • 相关阅读:
    防止域名恶意指向的解决办法
    Spring @Configuration @Import
    CAS 集成认证
    远程桌面登录蓝色屏幕、不显示桌面怎么解决?
    终端服务器超出了最大允许连接数
    Fiddler 常见几种解决捕获不到请求的方法
    android TimerTask 的简单应用
    Android 数字签名学习笔记
    Android 遍历卡数据并按图片,音乐等分类保存
    Android 最简单的SD卡文件遍历程序
  • 原文地址:https://www.cnblogs.com/rwxwsblog/p/5864897.html
Copyright © 2020-2023  润新知