quartz2.3.0(十)xml配置方式定义quartz定时任务

1、新增pom依赖

除了按照《quartz2.3.0系列目录——带您由浅入深全面掌握quartz2.3.0》添加依赖之外,pom.xml里新增加依赖:

<dependency>
            <groupId>opensymphony</groupId>
            <artifactId>quartz-all</artifactId>
            <version>1.6.3</version>
</dependency>
<dependency>
            <groupId>javax.transaction</groupId>
            <artifactId>jta</artifactId>
            <version>1.1</version>
</dependency>

2、quartz.properties配置

#============================================================================
# Configure Main Scheduler Properties
#============================================================================

org.quartz.scheduler.instanceName: TestScheduler
org.quartz.scheduler.instanceId: AUTO

#============================================================================
# Configure ThreadPool
#============================================================================

org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 3
org.quartz.threadPool.threadPriority: 5

#============================================================================
# Configure JobStore
#============================================================================

org.quartz.jobStore.misfireThreshold: 60000

org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

#============================================================================
# Configure Plugins
#============================================================================

org.quartz.plugin.triggHistory.class: org.quartz.plugins.history.LoggingJobHistoryPlugin

org.quartz.plugin.jobInitializer.class: org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
org.quartz.plugin.jobInitializer.fileNames: quartz_data.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound: true
org.quartz.plugin.jobInitializer.scanInterval: 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction: false

3、quartz_data.xml配置

<?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_1_8.xsd"
    version="1.8">

    <pre-processing-commands>
        <delete-jobs-in-group>*</delete-jobs-in-group>  <!-- 清除调度器中的所有作业 -->
        <delete-triggers-in-group>*</delete-triggers-in-group> <!-- 清除调度器中的所有触发器 -->
    </pre-processing-commands>

    <processing-directives>
        <!-- 如果调度程序中有任何同名的作业/触发器(与此文件中相同),会覆盖它们 -->
        <overwrite-existing-data>true</overwrite-existing-data>
        <!-- 如果调度程序中有任何同名的作业/触发器(与此文件中相同),并且覆盖为false,则忽略它们,而不是生成错误 -->
        <ignore-duplicates>false</ignore-duplicates>
    </processing-directives>

    <schedule>
        <job>
            <name>TestJob1</name>
            <job-class>org.quartz.examples.example10.SimpleJob</job-class>
        </job>

        <job>
            <name>TestDurableJob</name>
            <job-class>org.quartz.examples.example10.SimpleJob</job-class>
            <durability>true</durability>
            <recover>false</recover>
        </job>

        <trigger>
            <simple>
                <name>TestSimpleTrigger1AtFiveSecondInterval</name>
                <job-name>TestJob1</job-name>
                <repeat-count>-1</repeat-count> <!-- repeat indefinitely  -->
                <repeat-interval>5000</repeat-interval>  <!--  every 5 seconds -->
            </simple>
        </trigger>

        <job>
            <name>TestJob2</name>
            <group>GroupOfTestJob2</group>
            <description>This is the description of TestJob2</description>
            <job-class>org.quartz.examples.example10.SimpleJob</job-class>
            <durability>false</durability>
            <recover>true</recover>
            <job-data-map>
                <entry>
                    <key>someKey</key>
                    <value>someValue</value>
                </entry>
                <entry>
                    <key>someOtherKey</key>
                    <value>someOtherValue</value>
                </entry>
            </job-data-map>
        </job>

        <trigger>
            <simple>
                <name>TestSimpleTrigger2AtTenSecondIntervalAndFiveRepeats</name>
                <group>GroupOfTestJob2Triggers</group>
                <job-name>TestJob2</job-name>
                <job-group>GroupOfTestJob2</job-group>
                <start-time>2010-02-09T10:15:00</start-time>
                <misfire-instruction>MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT</misfire-instruction>
                <repeat-count>5</repeat-count>
                <repeat-interval>10000</repeat-interval>
            </simple>
        </trigger>

        <trigger>
            <cron>
                <name>TestCronTrigger2AtEveryMinute</name>
                <group>GroupOfTestJob2Triggers</group>
                <job-name>TestJob2</job-name>
                <job-group>GroupOfTestJob2</job-group>
                <job-data-map>
                    <entry>
                        <key>someKey</key>
                        <value>overriddenValue</value>
                    </entry>
                    <entry>
                        <key>someOtherKey</key>
                        <value>someOtherOverriddenValue</value>
                    </entry>
                </job-data-map>
                <cron-expression>0 * * ? * *</cron-expression>
            </cron>
        </trigger>

        <trigger>
            <cron>
                <name>TestCronTrigger2AtEveryMinuteOnThe45thSecond</name>
                <group>GroupOfTestJob2Triggers</group>
                <job-name>TestJob2</job-name>
                <job-group>GroupOfTestJob2</job-group>
                <start-time>2010-02-09T12:26:00.0</start-time>
                <end-time>2012-02-09T12:26:00.0</end-time>
                <misfire-instruction>MISFIRE_INSTRUCTION_SMART_POLICY</misfire-instruction>
                <cron-expression>45 * * ? * *</cron-expression>
                <time-zone>America/Los_Angeles</time-zone>
            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>

4、任务类,xml配置文件里指向的job任务类

package org.quartz.examples.example10;

import java.util.Date;
import java.util.Set;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * job任务类
 */
public class SimpleJob implements Job {

    private static Logger LOG = LoggerFactory.getLogger(SimpleJob.class);

    // 必须要有public修饰的无参构造函数
    public SimpleJob() {
    }

    // 定时器执行方法
    @SuppressWarnings("unchecked")
    public void execute(JobExecutionContext context) throws JobExecutionException {
        JobKey jobKey = context.getJobDetail().getKey();
        LOG.info("--------- job任务执行: " + jobKey + " executing at " + new Date() + ", fired by: "
                + context.getTrigger().getKey());

        if (context.getMergedJobDataMap().size() > 0) {
            Set<String> keys = context.getMergedJobDataMap().keySet();
            for (String key : keys) {
                String val = context.getMergedJobDataMap().getString(key);
                LOG.info("--------- job任务执行。 - jobDataMap entry: " + key + " = " + val);
            }
        }

        context.setResult("hello");
    }

}

5、PlugInExample调度器类

package org.quartz.examples.example10;

import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 这个示例将生成大量要运行的作业
 */
public class PlugInExample {

    public void run() throws Exception {
        Logger log = LoggerFactory.getLogger(PlugInExample.class);

        // 初始化一个调度工厂,并实例化一个调度类
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler sched = null;
        try {
            sched = sf.getScheduler();
        } catch (NoClassDefFoundError e) {
            log.error(" 无法加载类——很可能类路径上没有jta.jar。 如果在examples/lib文件夹中没有,请将它添加到这里,以便运行这个示例。", e);
            return;
        }

        log.info("----------- 不调度任何作业——依赖于XML定义 ");

        sched.start();
        Thread.sleep(300L * 1000L);

        sched.shutdown(true);

        SchedulerMetaData metaData = sched.getMetaData();
        log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
    }

    public static void main(String[] args) throws Exception {

        PlugInExample example = new PlugInExample();
        example.run();
    }

}

原文地址:https://www.cnblogs.com/zhuwenjoyce/p/11192343.html

时间: 2024-08-30 13:59:05

quartz2.3.0(十)xml配置方式定义quartz定时任务的相关文章

Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析

Spring3.2 中 Bean 定义之基于 XML 配置方式的源码解析 本文简要介绍了基于 Spring 的 web project 的启动流程,详细分析了 Spring 框架将开发人员基于 XML 定义的 Bean 信息转换为 Spring 框架的 Bean Definition 对象的处理过程,向读者展示了 Spring 框架的奥妙之处,可以加深开发人员对 Spring 框架的理解. 0 评论: 秦 天杰, 软件工程师, IBM China 2013 年 9 月 02 日 内容 在 IBM

spring3.0定时器 xml配置和注解方式

1.xml配置方式 web.xml <!-- 配置spring监听器和配置文件路径 -->     <context-param>         <param-name>contextConfigLocation</param-name>         <param-value>classpath:applicationContext.xml</param-value>     </context-param>    

Struts2 之 Validation 拦截器 基于XML配置方式实现(验证框架)

基于XML配置方式实现输入校验 I:定义Action *  要继承ActionSupport或者实现Validateable接口: II:配置struts_validate.xml文件 *  验证出错转向的页面                struts.xml配置<result name=“input”>/validate/loginxml.jsp</result>                  其中input转向是在action中已经定义好的. III:配置验证的xml文件

转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html 使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下,文件的取名格式为:ActionClassName-validation.xml.ActionClassName为action的简单类名,-validation为固定写法.如果Action类为cn.validate.acti

hibernate 联合主键生成机制(组合主键XML配置方式)

hibernate 联合主键生成机制(组合主键XML配置方式) 如果数据库中用多个字段而不仅仅是一个字段作为主键,也就是联合主键,这个时候就可以使用hibernate提供的联合主键生成策略. 具体如下: 可以使用一个组件作为一个实体类的标识符.你的组件类必须满足以下要求: 它必须实现 java.io.Serializable 接口 它必须重新实现 equals() 和 hashCode() 方法,始终和组合关键字在数据库中的概念保持一致 注意:在 Hibernate3 中,第二个要求并非是 Hi

Spring 中使用XML配置方式和使用注解方式实现DI

Spring容器给我们提供了很好的环境,我们只关注主要业务即可,其他的无需关注太多.今天刚学的DI DI(Dependency Injection):依赖注入 使用XML配置文件完成依赖注入 1.1普通属性的注入 创建实体类: package cn.spring.entity; import java.io.Serializable; /** * Created by accp on 2017/3/23. */ public class User implements Serializable

log4j详解(二) XML 配置方式

上一篇文章说到了 log4j 的 properties 的配置方式,虽然感觉区别没有很大,但是 log4j.properties的配置方式里面不能使用 Filter 过滤器来限制日志级别,另一个原因在于 log4j.xml 在插入数据库的时候sql 语句可以放在 layout 属性的 ConversionPattern 参数中,而 log4j.properties 配置起来就显得更加麻烦. 一.步骤    1.引入 jar 包    2.src 下创建 log4j.xml 文件    3.配置头

Spring MVC 的 Java Config ( 非 XML ) 配置方式

索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml web/pom.xml web.xml WebInitializer.java WebConfig.java RootConfig.java 一.引入必要类库 spring-context spring-context-support spring-webmvc:引入该包后,maven 会自动解析依赖,引入 spring-web 等包. 1.solution/pom.xml 1

Spring 基于xml配置方式的AOP

我们具体用代码来说明: 1.ArithmeticCalculator.java 1 package com.proc; 2 3 public interface ArithmeticCalculator { 4 int add(int i, int j); 5 int sub(int i, int j); 6 7 int mul(int i, int j); 8 int div(int i, int j); 9 } 2.ArithmeticCalculatorImpl.java 实现接口Arit