任务调度Quartz初探Demo(二)

来源:互联网 发布:ubuntu 配置ip地址 编辑:程序博客网 时间:2024/06/05 07:09

上篇博客任务调度Quartz初探Demo(一) 说了一些关于Quartz的理论知识,这里写一个完整的Demo。

工程结构如下图:
这里写图片描述

1 pom.xml
此处请注意Spring使用的版本与Quartz所使用的版本。

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>org.fan.test.xml</groupId>    <artifactId>xmlTest</artifactId>    <version>1.0-SNAPSHOT</version>    <dependencies>        <dependency>            <groupId>xstream</groupId>            <artifactId>xstream</artifactId>            <version>1.2.2</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-tx</artifactId>            <version>3.2.16.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context-support</artifactId>            <version>3.2.16.RELEASE</version>        </dependency>        <dependency>            <groupId>org.quartz-scheduler</groupId>            <artifactId>quartz</artifactId>            <version>1.8.5</version>        </dependency>    </dependencies></project>

2 TypeConfig.java

package org.fan.test.xstream;import java.util.List;/** * Created by fan on 16-1-18. */public class TypeConfig {    int type;    //String datas;    long[] datas;    public int getType() {        return type;    }    public void setType(int type) {        this.type = type;    }    public long[] getDatas() {        return datas;    }    public void setDatas(long[] datas) {        this.datas = datas;    }}

3 TypeConfigList.java

package org.fan.test.xstream;import java.util.List;/** * Created by fan on 16-1-18. */public class TypeConfigList {    List<TypeConfig> typeConfigList;    public List<TypeConfig> getTypeConfigList() {        return typeConfigList;    }    public void setTypeConfigList(List<TypeConfig> typeConfigList) {        this.typeConfigList = typeConfigList;    }}

4 XmlParserJob.java

package org.fan.test.xstream;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.xml.DomDriver;import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import org.springframework.context.ApplicationContext;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.util.Map;/** * Created by fan on 16-1-25. */public class XmlParserJob implements Job {    static XStream xStream = new XStream(new DomDriver());    TypeConfigList typeConfigList;    FileInputStream pusherInputStream = null;    static {        xStream.alias("TypeConfigs", TypeConfigList.class);        xStream.alias("TypeConfig", TypeConfig.class);        xStream.addImplicitCollection(TypeConfigList.class, "typeConfigList");    }    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {        System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");        Map dataMap = jobExecutionContext.getJobDetail().getJobDataMap();        String size = (String) dataMap.get("size");        System.out.println("size = " + size);        //如果public class XmlParserJob implements StatefulJob,则本次执行修改JobDataMap的值,对下次执行是可见的。请看文末的运行结果。        //dataMap.put("size", "50");        System.out.println("dataMap put ok");        Map dataMap2 = jobExecutionContext.getJobDetail().getJobDataMap();        String size2 = (String) dataMap2.get("size");        System.out.println("size2 = " + size2);        Map triggerDataMap = jobExecutionContext.getTrigger().getJobDataMap();        System.out.println("count = " + triggerDataMap.get("count"));        ApplicationContext applicationContext = (ApplicationContext) dataMap.get("applicationContext");        String path = XmlParser.class.getResource("/").getPath();        try {            pusherInputStream = new FileInputStream(path + "config.xml");        } catch (FileNotFoundException e) {            e.printStackTrace();        }        typeConfigList = (TypeConfigList) xStream.fromXML(pusherInputStream);        for (TypeConfig typeConfig : typeConfigList.getTypeConfigList()) {            long[] datas = typeConfig.getDatas();            for (int i = 0; i < datas.length; i++) {                System.out.println(datas[i]);            }        }    }}

5 Main.java

package org.fan.test.xstream;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/** * Created by fan on 16-1-25. */public class Main {    public static void main(String[] args) {        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");    }}

6 applicationContext.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:p="http://www.springframework.org/schema/p"       xsi:schemaLocation="http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       ">    <bean id="xmlParserJob"          class="org.springframework.scheduling.quartz.JobDetailBean"          p:jobClass="org.fan.test.xstream.XmlParserJob"          p:applicationContextJobDataKey="applicationContext">        <property name="jobDataAsMap">            <map>                <entry key="size" value="10"/>            </map>        </property>    </bean>    <bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"          p:jobDetail-ref="xmlParserJob"          p:startDelay="1000"          p:repeatInterval="2000"          p:repeatCount="100">        <property name="jobDataAsMap">            <map>                <entry key="count" value="22"/>            </map>        </property>    </bean>    <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">        <property name="triggers">            <list>                <ref bean="simpleTrigger"/>            </list>        </property>        <property name="schedulerContextAsMap">            <map>                <entry key="timeout" value="30"/>            </map>        </property>    </bean></beans>

7 config.xml

<?xml version="1.0" encoding="UTF-8"?><TypeConfigs>    <TypeConfig>        <type>1</type>        <datas>            <long>123</long>            <long>321</long>            <long>44444</long>        </datas>    </TypeConfig>    <TypeConfig>        <type>2</type>        <datas>            <long>7777</long>            <long>88888845</long>        </datas>    </TypeConfig></TypeConfigs>

8 运行结果

(1)运行之后,改变target目录下的config.xml可以看到实时的数值变化。

这里写图片描述
(2)如果XmlParserJob实现了StatefulJob接口

public class XmlParserJob implements StatefulJob

则本次执行修改JobDataMap的值,对下次执行是可见的。运行结果如下所示:
这里写图片描述

0 0
原创粉丝点击