<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
    主站蜘蛛池模板: 亚洲男人的天堂www| 亚洲一线产品二线产品| 中国人xxxxx69免费视频| 亚洲看片无码在线视频 | 五月婷婷综合免费| 在线aⅴ亚洲中文字幕| 免费理论片51人人看电影| 一级毛片**免费看试看20分钟| 8x8×在线永久免费视频| 亚洲精品国产首次亮相| 久久精品国产69国产精品亚洲| 久久亚洲精品成人无码| 久久久青草青青亚洲国产免观| fc2成年免费共享视频网站| 亚洲五月六月丁香激情| 日韩中文字幕在线免费观看| 亚洲av无码成h人动漫无遮挡| 国产公开免费人成视频| 亚洲一区动漫卡通在线播放| 欧亚精品一区三区免费| 中文字幕免费在线视频| 亚洲中文字幕久久精品蜜桃 | 日本高清免费不卡视频| 国产精品视频全国免费观看| 亚洲日本久久久午夜精品| 亚洲线精品一区二区三区影音先锋 | 亚洲精品天天影视综合网| 国产美女无遮挡免费网站| 最近免费中文字幕大全免费| 久香草视频在线观看免费| 亚洲永久网址在线观看| 久久久久亚洲AV无码观看| 亚洲午夜国产精品无码| 日韩免费视频在线观看| 久久国产色AV免费观看| 两个人看www免费视频| 美女又黄又免费的视频| 2020久久精品亚洲热综合一本| 日本免费人成视频播放| 免费能直接在线观看黄的视频| 亚洲五月综合网色九月色|