<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    【永恒的瞬間】
    ?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="" /> -->
    		<!-- 系統會在啟動時加載 -->
    		<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

    1
    2
    3
    4
    5
    6
    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

    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();
    ?
    		// 將觸發任務的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]);
    					}}elseif(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接口,繼承它可以實現不同的任務實現

    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
    /**
     * 定時任務的基本接口
     */publicinterface Task
    {
    ?
    	/**
    	 * 任務執行
    	 * 
    	 * @param request
    	 *            請求參數
    	 * @param response
    	 *            返回參數
    	 * @param cxt
    	 * @roseuid 4535938002AC
    	 */publicvoid process(TaskContext cxt) throws TaskException;
    ?
    	/**
    	 * 任務名稱
    	 * 
    	 * @return java.lang.String
    	 * @roseuid 453DB0AB01B5
    	 */public String getName();
    }


    2.從scheduler中刪除一個任務

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



    二.Trigger定時器,任務與定時器是一對多的關系
    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)) {//創建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);
    			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 閱讀(2140) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 国产精品久免费的黄网站| 亚洲夜夜欢A∨一区二区三区| 真人无码作爱免费视频| 亚洲中文久久精品无码| 亚洲无砖砖区免费| 国产亚洲午夜精品| 亚洲黄色在线播放| 免费又黄又硬又爽大片| 在线观看永久免费| 高h视频在线免费观看| 亚洲天堂在线播放| 亚洲av成人一区二区三区在线观看| 视频免费在线观看| 亚洲精品V天堂中文字幕| 久久精品国产亚洲av四虎| 免费观看的av毛片的网站| 免费精品99久久国产综合精品| 亚洲人成欧美中文字幕| 亚洲AV无码国产丝袜在线观看 | 国产在线98福利播放视频免费| 永久免费A∨片在线观看| 亚洲av永久无码精品秋霞电影秋| 久久精品国产亚洲AV果冻传媒| 国产又粗又猛又爽又黄的免费视频 | 亚洲国产精品一区二区久久| 国产精品色午夜免费视频| 永久免费在线观看视频| www免费黄色网| 色五月五月丁香亚洲综合网| 337p日本欧洲亚洲大胆精品555588| 亚洲国产一区二区三区| 午夜视频免费观看| 曰批视频免费30分钟成人| 日韩免费电影网址| 国产99久久久久久免费看| 国产成人亚洲综合a∨| 亚洲综合在线一区二区三区| 亚洲男女性高爱潮网站| 亚洲AV无码一区二区乱孑伦AS| 亚洲男人的天堂在线va拉文| 日韩高清免费在线观看|