<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 閱讀(2132) 評論(0)  編輯  收藏 所屬分類: Spring
    主站蜘蛛池模板: 人人鲁免费播放视频人人香蕉| 久久精品国产亚洲AV蜜臀色欲 | 免费h成人黄漫画嘿咻破解版| 亚洲欧洲日本在线观看| 国产免费丝袜调教视频| 亚洲五月综合缴情婷婷| 久久精品网站免费观看| 亚洲码和欧洲码一码二码三码| 热99re久久免费视精品频软件| 羞羞视频免费观看| 亚洲人成伊人成综合网久久久| 国产午夜无码精品免费看| 亚洲精品国产福利片| 成人免费看片又大又黄| 特级aa**毛片免费观看| 亚洲中文字幕无码久久2017| 麻豆精品成人免费国产片| 亚洲第一页在线播放| 日本一区二区三区日本免费| 成年大片免费高清在线看黄| 日韩亚洲一区二区三区| 无限动漫网在线观看免费| 羞羞网站免费观看| 无码欧精品亚洲日韩一区| 免费精品国产自产拍在| 污视频网站免费在线观看| 亚洲阿v天堂在线| 7723日本高清完整版免费| 无遮挡a级毛片免费看| 午夜亚洲国产理论秋霞| 成年女人男人免费视频播放| 中文字幕在线观看免费| 亚洲国产成人精品无码一区二区| 四虎免费久久影院| 日韩午夜理论免费TV影院| 亚洲综合激情五月色一区| 亚洲色欲色欲www在线丝| 国产乱码免费卡1卡二卡3卡| 一级毛片aa高清免费观看| 亚洲毛片一级带毛片基地| 亚洲国产精品人人做人人爽|