用户操作
[即时聊天] [发私信] [加为好友]
babydavic(王汉祥)ID:babydavic
115646次访问,排名788,好友9人,关注者10人。
java
babydavic的文章
原创 74 篇
翻译 1 篇
转载 38 篇
评论 57 篇
babydavic(王汉祥)的公告
大家互相讨教问题:请找我.QQ群:13861235 .....
最近评论
redcoatjk:你也很搞笑
crtl+v 2次....
搜索:又是一模一样的~!
platform:应该去看俺的.net版本的http send方法。哈哈
基本上已经是天下无敌了
xubin_xubin:写的不错
killingangle:不错啊,我转走了哦~谢谢啊~!~!
文章分类
收藏
    相册
    美丽图片
    dojo
    dojo官方网站
    DWR
    DWR collection converter 使用摘要
    DWR util 介绍
    ejb3
    ejb3的中文简介网站(RSS)
    javascript
    javascriptkit
    javascript画图形
    seo问题
    Web2.0(外国)
    判断系统是否安装了alexa
    动态javascript(外国)
    图片相册-javascript(RSS)
    图片集旋转显示
    Jmeter
    Jmeter_让它教会你使用jmeter
    jmeter下载
    jprofile
    Jprofile使用说明
    Junit单元测试
    junit测试
    MQ
    MQ
    webServer
    resin的另一个网址
    WebWork
    webwork中实现扩展用例方案1
    webwork基本用法
    正则表达式
    正则表达式
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 初探quartz scheduler 收藏

    新一篇: Linux mysql安装 | 旧一篇: Velocity中如何判断null

    quartz是opensymphony提供的用来做SCHEDULE的框架

    在spring中通过org.springframework.scheduling.quartz.SchedulerFactoryBean来获得Schedule类
    	<bean id="quartzSchedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton">
    <!-- set quartz scheduler factory configuration location -->
    <!-- <property name="configLocation" value="" /> -->
    <!-- 系统会在启动时加载 -->
    <property name="autoStartup" value="true" />
    </bean>
    <bean id="taskManage" class="com.sumit.task.TaskManage" scope="singleton">
    <property name="taskDAO" ref="taskDao" />
    <property name="scheduler" ref="quartzSchedulerFactory" />
    </bean>

    QUARTZ中有Job与Trigger两种概念

    一.Job详细描述具体的任务运行代码实现
    1.新增一个任务到scheduler

    JobDetail job = new JobDetail(taskName, Scheduler.DEFAULT_GROUP,DefaultQuartzJob.class);
    JobDataMap jobDataMap = job.getJobDataMap();
    //根据PUT不同的TASK而运行不同的任务
    jobDataMap.put("Task", task);
    job.setDurability(true);
    scheduler.addJob(job, true);

    ==>DefaultQuartzJob

    public class DefaultQuartzJob implements Job {
    
    private static Logger logger = Logger.getLogger(DefaultQuartzJob.class);

    public void execute(JobExecutionContext ctx) throws JobExecutionException { JobDataMap jobDataMap = ctx.getJobDetail().getJobDataMap();
    TaskTO task = (TaskTO) jobDataMap.get("Task");

    Task entryTask = task.getEntryTask();

    if (entryTask == null) { logger
    .error("Task " + task.getName()
    + " couldn't be initialized!");
    return;
    }
    TaskContext taskContext = new DefaultTaskContext();

    // 将触发任务的Trigger中所有的参数添加到上下文中
    JobDataMap triggerDataMap = ctx.getTrigger().getJobDataMap();
    String[] keys = triggerDataMap.getKeys();
    if (keys != null) { for (int i = 0; i < keys.length; i++) { Object obj = triggerDataMap.get(keys[i]);
    if (obj instanceof String[]) { String [] data=(String[]) obj;
    if(data.length>0){ taskContext.setParameter(keys[i], data[0]);
    } } else if(obj instanceof String){ taskContext.setParameter(keys[i], (String)obj);
    } } } try { // 为任务时间执行次数加1
    TaskManage tm = (TaskManage) triggerDataMap
    .get(TaskManage.TASKMANAGE_ATTRIBUTE_NAME);
    tm.addTriggerExecuteTimes(triggerDataMap
    .getString(TaskManage.TRIGGER_ATTRIBUTE_NAME));
    } catch (TaskException e) { logger.error(
    "catch exception while process task " + task.getName(), e);
    } try { //根据实例化不同的TASK而运行不同的任务
    entryTask.process(taskContext);
    } catch (TaskException e) { logger.error(
    "catch exception while process task " + task.getName(), e);
    } } }
    ==>TASK接口,继承它可以实现不同的任务实现

    /**
    * 定时任务的基本接口
    */
    public interface Task
    {
    /**
    * 任务执行
    *
    * @param request
    * 请求参数
    * @param response
    * 返回参数
    * @param cxt
    * @roseuid 4535938002AC
    */
    public void process(TaskContext cxt) throws TaskException;

    /**
    * 任务名称
    *
    * @return java.lang.String
    * @roseuid 453DB0AB01B5
    */
    public String getName();
    }

    2.从scheduler中删除一个任务

    scheduler.deleteJob(taskName, Scheduler.DEFAULT_GROUP);

    二.Trigger定时器,任务与定时器是一对多的关系
    1.新建Trigger,初步分为CRONTRIGGER,SIMPLETRIGGER

    if (TRIGGER_CRON.equals(triggerType)) {
    //创建CRONTRIGGER
    trigger = new CronTrigger(triggerName, Scheduler.DEFAULT_GROUP,
    taskName, Scheduler.DEFAULT_GROUP, validStartTime,
    validEndTime, triggerPattern);
    trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
    } else { //创建SIMPLETRIGGER
    trigger = new SimpleTrigger(triggerName,
    Scheduler.DEFAULT_GROUP, taskName,
    Scheduler.DEFAULT_GROUP, validStartTime, validEndTime,
    repeatCount, repeatInterval);
    trigger.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT);
    }
    try { //添加trigger到scheduler
    scheduler.scheduleJob(trigger);
    logger.debug("trigger " + trigger.getName()
    + " have been loaded to scheduler!");
    } catch (SchedulerException e) { logger.error("Catch exception " + e.getMessage()
    + " while adding trigger " + triggerName
    + " into scheduler", e);
    throw new TaskException("0096", "Catch exception " + e.getMessage()
    + " while adding trigger " + triggerName
    + " into scheduler", e);
    }

    2.删除Trigger
    try {
    			scheduler.unscheduleJob(triggerName, Scheduler.DEFAULT_GROUP);
    } catch (SchedulerException e) { logger.error("Catch exception " + e.getMessage()
    + " while remove trigger " + triggerName
    + " from scheduler", e);
    throw new TaskException("0096", "Catch exception " + e.getMessage()
    + " while removing trigger " + triggerName
    + " from scheduler", e);
    }

    ps:以上代码片段只提供参考,不可能运行成功,原因是没有贴出全部依赖代码.scheduler的所有方法都是官方提供,可以使用.

    发表于 @ 2008年09月03日 17:34:00|评论(loading...)|收藏

    新一篇: Linux mysql安装 | 旧一篇: Velocity中如何判断null

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © babydavic(王汉祥)