Quartz(04) Quartz 基本配置

上一章节地址Quartz(03) cron 表达式
Quartz 为每个job的配置可以硬编码在Java代码里,但是这显然不是理想的效果.比如以前每分钟执行一次的任务,需求变了,需要改成每小时执行一次,那么我们还需要去修改Java代码,重新编,译这是一件很繁琐的事情.本文主要讲解 Quartz 的基本配置和一个重要插件的使用.这样的的话,我们硬编码的部分就是自定义JOB类的编写,其他的都是通过配置文件来完成,非常方便快捷. Quartz的基本配置文件很简单,就是quartz.proerties 文件,存放在class目录下.如果使用插件还需要quartz_jobx.xml的配置,存放位置相同.

源码下载地址

下面是一份quartz.proerties 的配置文件.里面写了注释

# Default Properties file for use by StdSchedulerFactory
# to create a Quartz Scheduler Instance, if a different
# properties file is not explicitly specified.
#
#配置scheduler信息,这一部分基本一致,无需修改
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
#Job存储方式的配置
#jobStore 方式为RAM存储没有实现持久化
org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
#===============================================================    

#Configure Plugins     
#插件的配置 job和trigger的配置可以写在fileNames 定义的xml文件中
#比如这里是配置在quartz_jobx.xml 文件中,该文件也存放在classpath下
# 这样在启动Quartz的时候,Quartz 自动到quartz_jobx.xml 文件中获取#job 和trigger的配置.
#===============================================================      

org.quartz.plugin.jobInitializer.class=org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames=quartz_jobx.xml

再看下quartz_jobx.xml 得配置,配置了三个job

<?xml version='1.0' encoding='utf-8'?>  
<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"  
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
   xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd"  
   version="2.0">
    <schedule>
        <job>
            <name>my_job1</name>
            <group>my_group1</group>
            <description>配置定时任务1</description>
            <job-class>com.quartz.job.Q1</job-class>
            <durability>false</durability>
            <recover>false</recover>
            <job-data-map>
                <entry>
                    <key>param1</key>
                    <value>123</value>
                </entry>
                <entry>
                    <key>param2</key>
                    <value>456</value>
                </entry>
            </job-data-map>
        </job>
        <trigger>
            <cron>
                <name>my_trigger1</name>
                <group>my_trigger_group_1</group>
                <job-name>my_job1</job-name>
                <job-group>my_group1</job-group>
                <cron-expression>0/5 * * * * ?</cron-expression>
            </cron>
        </trigger>
        <job>
            <name>my_job2</name>
            <group>my_group1</group>
            <description>配置定时任务2</description>
            <job-class>com.quartz.job.Q2</job-class>
            <durability>false</durability>
            <recover>false</recover>
            <job-data-map>
                <entry>
                    <key>param1</key>
                    <value>ABC</value>
                </entry>
                <entry>
                    <key>param2</key>
                    <value>DEF</value>
                </entry>
            </job-data-map>
        </job>
        <trigger>
            <cron>
                <name>my_trigger2</name>
                <group>my_trigger_group_1</group>
                <job-name>my_job2</job-name>
                <job-group>my_group1</job-group>
                <cron-expression>0/5 * * * * ?</cron-expression>
            </cron>
        </trigger>
        <job>
            <name>my_job3</name>
            <group>my_group1</group>
            <description>配置定时任务3</description>
            <job-class>com.quartz.job.Q3</job-class>
            <durability>false</durability>
            <recover>false</recover>
            <job-data-map>
                <entry>
                    <key>param1</key>
                    <value>ABC</value>
                </entry>
                <entry>
                    <key>param2</key>
                    <value>DEF</value>
                </entry>
            </job-data-map>
        </job>
        <trigger>
            <cron>
                <name>my_trigger3</name>
                <group>my_trigger_group_1</group>
                <job-name>my_job3</job-name>
                <job-group>my_group1</job-group>
                <cron-expression>0/5 * * * * ?</cron-expression>
            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>

三个实现了job接口的类,这里只贴出Q1

package com.quartz.job;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Q1 implements Job {

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.println("------------------------");
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd hh:mm:ss");
        System.out.println(sdf.format(new Date()));
        System.out.println("------------------------");
    }

}

最后就是如何启动Quartz了,如下代码

package com.quartz.test;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.jobs.FileScanJob;

/**
 * 使用配置文件来创建任务
 * 
 * 1.quartz.properties 文件配置了Quartz 的基本信息 2.org.quartz.plugin.jobInitializer.class 从fileNames 中获取schedule的配置
 * 
 * @author Administrator
 *
 */
public class FileConfigTest {
    public static void classTest() {
        org.quartz.impl.jdbcjobstore.JobStoreTX j = null;
        FileScanJob fs;
    }

    public static void main(String[] args) {
        try {
            Scheduler shceScheduler = StdSchedulerFactory.getDefaultScheduler();
            shceScheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }
    }
}

这样的话,只要运行FileConfigTest 这个类,Quartz就运行了.而且有三个job在执行. 梳理一下运行过程.启动FileConfigTest 的时候,Scheduler shceScheduler = StdSchedulerFactory.getDefaultScheduler(); 代码在创建的时候,Quartz默然去找quartz.proerties 文件,如果在classpath下有我们定义的该文件,那么从该文件中读取配置信息.没有找到用户配置的quartz.proerties文件,那么Quartz就到jar包中找到默认的Quartz配置文件. 当Quartz 读取quartz.proerties 配置文件的时候,发现我们使用的XMLSchedulingDataProcessorPlugin 插件,并且配置了fileNames=quartz_jobx.xml,这个时候,Quartz 就到quartz_jobx.xml 文件下我们对schedule(job and trigger) 的信息,并且实现初始化. 当运行shceScheduler.start();的时候,启动quartz_jobx.xml 中配置的所有任务.

综上所述,我们需要做四件事,1.定义自己Job类,2.配置quartz.proerties文件,3.配置quartz_jobx.xml 文件 4.编写启动Quartz的类.

目录文件大致如下.这里写图片描述
下一章节地址Quartz(05) job 的持久化

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值