【永恒的瞬間】
          ?Give me hapy ?
          quartz是opensymphony提供的用來做SCHEDULE的框架

          在spring中通過org.springframework.scheduling.quartz.SchedulerFactoryBean來獲得Schedule類
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          	<bean id="quartzSchedulerFactory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton">
          		<!-- set quartz scheduler factory configuration location -->
          		<!-- <property name="configLocation" value="" /> -->
          		<!-- 系統(tǒng)會(huì)在啟動(dòng)時(shí)加載 -->
          		<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詳細(xì)描述具體的任務(wù)運(yùn)行代碼實(shí)現(xiàn)
          1.新增一個(gè)任務(wù)到scheduler

          1
          2
          3
          4
          5
          6
          JobDetail job = new JobDetail(taskName, Scheduler.DEFAULT_GROUP,DefaultQuartzJob.class);
          JobDataMap jobDataMap = job.getJobDataMap();
          //根據(jù)PUT不同的TASK而運(yùn)行不同的任務(wù)
          jobDataMap.put("Task", task);
          job.setDurability(true);
          scheduler.addJob(job, true);
          



          ==>DefaultQuartzJob

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          31
          32
          33
          34
          35
          36
          37
          38
          39
          40
          41
          42
          43
          44
          45
          46
          47
          48
          49
          50
          51
          52
          53
          54
          55
          publicclass DefaultQuartzJob implements Job {
          ?
          	privatestatic Logger logger = Logger.getLogger(DefaultQuartzJob.class);
          ?
          	publicvoid 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();
          ?
          		// 將觸發(fā)任務(wù)的Trigger中所有的參數(shù)添加到上下文中
          		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]);
          					}}elseif(obj instanceof String){
          					taskContext.setParameter(keys[i], (String)obj);
          				}}}try{// 為任務(wù)時(shí)間執(zhí)行次數(shù)加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{//根據(jù)實(shí)例化不同的TASK而運(yùn)行不同的任務(wù)
          			entryTask.process(taskContext);
          		}catch (TaskException e) {
          			logger.error(
          					"catch exception while process task " + task.getName(), e);
          		}}}

          ==>TASK接口,繼承它可以實(shí)現(xiàn)不同的任務(wù)實(shí)現(xiàn)

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          /**
           * 定時(shí)任務(wù)的基本接口
           */publicinterface Task
          {
          ?
          	/**
          	 * 任務(wù)執(zhí)行
          	 * 
          	 * @param request
          	 *            請(qǐng)求參數(shù)
          	 * @param response
          	 *            返回參數(shù)
          	 * @param cxt
          	 * @roseuid 4535938002AC
          	 */publicvoid process(TaskContext cxt) throws TaskException;
          ?
          	/**
          	 * 任務(wù)名稱
          	 * 
          	 * @return java.lang.String
          	 * @roseuid 453DB0AB01B5
          	 */public String getName();
          }


          2.從scheduler中刪除一個(gè)任務(wù)

          1
          scheduler.deleteJob(taskName, Scheduler.DEFAULT_GROUP);
          



          二.Trigger定時(shí)器,任務(wù)與定時(shí)器是一對(duì)多的關(guān)系
          1.新建Trigger,初步分為CRONTRIGGER,SIMPLETRIGGER
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          if (TRIGGER_CRON.equals(triggerType)) {//創(chuàng)建CRONTRIGGER
          				trigger = new CronTrigger(triggerName, Scheduler.DEFAULT_GROUP,
          						taskName, Scheduler.DEFAULT_GROUP, validStartTime,
          						validEndTime, triggerPattern);
          				trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
          			}else{//創(chuàng)建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);
          			thrownew TaskException("0096", "Catch exception " + e.getMessage()
          					+ " while adding trigger " + triggerName
          					+ " into scheduler", e);
          		}
          ?
          


          2.刪除Trigger
          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          try{
          			scheduler.unscheduleJob(triggerName, Scheduler.DEFAULT_GROUP);
          		}catch (SchedulerException e) {
          			logger.error("Catch exception " + e.getMessage()
          					+ " while remove trigger " + triggerName
          					+ " from scheduler", e);
          			thrownew TaskException("0096", "Catch exception " + e.getMessage()
          					+ " while removing trigger " + triggerName
          					+ " from scheduler", e);
          
          posted on 2007-01-12 19:32 ???MengChuChen 閱讀(2141) 評(píng)論(0)  編輯  收藏 所屬分類: Spring
          主站蜘蛛池模板: 含山县| 辽中县| 抚宁县| 仙游县| 炎陵县| 慈溪市| 汝州市| 惠安县| 荆门市| 松潘县| 宁陕县| 子长县| 阿克| 沂南县| 星子县| 新化县| 巢湖市| 安远县| 泸定县| 肥城市| 长乐市| 收藏| 开江县| 响水县| 浮山县| 萨迦县| 准格尔旗| 台中市| 兴宁市| 尉犁县| 四平市| 巴塘县| 温宿县| 郓城县| 冕宁县| 广元市| 额敏县| 林西县| 长治县| 兰溪市| 竹山县|