Quartz入门03

接下来,我们用Cron表达式加配置文件的方式,写一个简单的例子

1、首先是任务类
1.1、Job001

package com.neohope.quartz.test;

import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;

/**
 * Created by Hansen
 */
public class Job001 implements Job {
    private static Logger logger = LoggerFactory.getLogger(Job001.class);

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("Job001 Executing : " + new Date());

        //获取Job的参数
        JobDetail jobDetail = jobExecutionContext.getJobDetail();
        //String jobDesc = jobDetail.getDescription();

        JobDataMap dataMap = jobDetail.getJobDataMap();
        String message = dataMap.getString("JOB_MSG");
        logger.info("Job001 Message is : " + message);

    }
}

1.2、Job002

package com.neohope.quartz.test;

import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;

/**
 * Created by Hansen
 */
public class Job002 implements Job {
    private static Logger logger = LoggerFactory.getLogger(Job002.class);

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        logger.info("Job002 Executing : " + new Date());

        //获取Job的参数
        JobDetail jobDetail = jobExecutionContext.getJobDetail();
        //String jobDesc = jobDetail.getDescription();

        JobDataMap dataMap = jobDetail.getJobDataMap();
        String message = dataMap.getString("JOB_MSG");
        logger.info("Job002 Message is : " + message);
    }
}

2、然后是测试类

package com.neohope.quartz.test;

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Date;


/**
 * Created by Hansen
 */
public class Test002 {

    public void run() throws Exception {
        Logger logger = LoggerFactory.getLogger(Test002.class);

        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler scheduler = sf.getScheduler();

        scheduler.start();
        logger.info("scheduler started");

        try {
            System.in.read();
        } catch (Exception e) {
        }

        scheduler.shutdown(true);
        logger.info("scheduler ended");
    }

    public static void main(String[] args) throws Exception {
        System.setProperty("org.quartz.properties","quartzN.properties");

        Test002 test = new Test002();
        test.run();
    }
}

3、Quartz配置文件

#============================================================================
# Configure Main Scheduler Properties  
#============================================================================
org.quartz.scheduler.instanceName: NeoScheduler
org.quartz.scheduler.instanceId: AUTO
org.quartz.scheduler.skipUpdateCheck: true

#============================================================================
# Configure ThreadPool  
#============================================================================
org.quartz.threadPool.class: org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount: 1
org.quartz.threadPool.threadPriority: 5

#============================================================================
# Configure JobStore  
#============================================================================
org.quartz.jobStore.misfireThreshold: 60000
org.quartz.jobStore.class: org.quartz.simpl.RAMJobStore

#org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
#org.quartz.jobStore.driverDelegateClass: org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
#org.quartz.jobStore.useProperties: false
#org.quartz.jobStore.dataSource: myDS
#org.quartz.jobStore.tablePrefix: QRTZ_
#org.quartz.jobStore.isClustered: false

#============================================================================
# Configure Datasources  
#============================================================================
#org.quartz.dataSource.myDS.driver: org.postgresql.Driver
#org.quartz.dataSource.myDS.URL: jdbc:postgresql://localhost/dev
#org.quartz.dataSource.myDS.user: jhouse
#org.quartz.dataSource.myDS.password: 
#org.quartz.dataSource.myDS.maxConnections: 5

#============================================================================
# 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: quartzNScheduler.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound: true
org.quartz.plugin.jobInitializer.scanInterval: 120
org.quartz.plugin.jobInitializer.wrapInUserTransaction: false

4、任务配置文件

<?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>
        <!-- clear all jobs in scheduler -->
        <delete-jobs-in-group>*</delete-jobs-in-group>
        <!-- clear all triggers in scheduler -->
        <delete-triggers-in-group>*</delete-triggers-in-group>
    </pre-processing-commands>
    
    <processing-directives>
        <!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them -->
        <overwrite-existing-data>true</overwrite-existing-data>
        <!-- if there are any jobs/trigger in scheduler of same name (as in this file),
        and over-write is false, ignore them rather then generating an error -->
        <ignore-duplicates>false</ignore-duplicates> 
    </processing-directives>
    
    <schedule>
        <job>
            <name>Job001</name>
            <group>JGroup001</group>
            <job-class>com.neohope.quartz.test.Job001</job-class>
            <job-data-map>
                <entry>
                    <key>JOB_MSG</key>
                    <value>Hi Job001</value>
                </entry>
            </job-data-map>
        </job>

        <trigger>
            <simple>
                <name>Trigger001</name>
                <group>TGroup001</group>
                <job-name>Job001</job-name>
                <job-group>JGroup001</job-group>
                <!--start-time>2010-02-09T10:15:00</start-time-->
                <!--end-time>2012-02-09T12:26:00.0</end-time-->
                <misfire-instruction>MISFIRE_INSTRUCTION_SMART_POLICY</misfire-instruction>
                <repeat-count>3</repeat-count>
                <repeat-interval>1000</repeat-interval>
            </simple>
        </trigger>

	    <job>
	        <name>Job002</name>
            <group>JGroup002</group>
            <description>Job002</description>
            <job-class>com.neohope.quartz.test.Job002</job-class>
            <job-data-map>
                <entry>
                    <key>JOB_MSG</key>
                    <value>Hi Job002</value>
                </entry>
            </job-data-map>
	    </job>

	    <trigger>
	        <cron>
	            <name>Trigger002</name>
	            <group>TGroup002</group>
	            <job-name>Job002</job-name>
	            <job-group>JGroup002</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>0/10 * * * * ? *</cron-expression>
	        </cron>
	    </trigger>
    </schedule>    
</job-scheduling-data>

5、大家运行一下看看吧

Leave a Reply

Your email address will not be published. Required fields are marked *

*