首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Quartz中定时支配针对特定目录的监控

2012-08-10 
Quartz中定时调度针对特定目录的监控????????? 在项目中以前采用Apache commons-io中的文件监听类实现针对

Quartz中定时调度针对特定目录的监控

????????? 在项目中以前采用Apache commons-io中的文件监听类实现针对特定目录的监听。在Quartz2.0针对特定目录的监控的job为DirectoryScanJob,针对目录的监听类为DirectoryScanListener。

?

实现目录的监听类:

package easyway.tbs.app.ejb;import java.io.File;import org.quartz.jobs.DirectoryScanListener;/** * 现实相关的DirectoryScanListener目录监听类的实现 * @author longgangbai * */public class EDirectoryScanListener implements DirectoryScanListener{public void filesUpdatedOrAdded(File[] afile) {for (File file : afile) {System.out.println(file.getPath());}}}

?

?

创建触发器和调用相关的job

package easyway.tbs.app.ejb;import static org.quartz.CronScheduleBuilder.cronSchedule;import static org.quartz.JobBuilder.newJob;import static org.quartz.TriggerBuilder.newTrigger;import java.text.ParseException;import java.util.Date;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerContext;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.SchedulerMetaData;import org.quartz.impl.StdSchedulerFactory;import org.quartz.jobs.DirectoryScanJob;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 定时扫描目录的定时任务的处理 * @author longgangbai * */public class DirectoryScanMain {/** *  * @param args * @throws SchedulerException * @throws ParseException */public static void main(String[] args) throws SchedulerException, ParseException {        Logger log = LoggerFactory.getLogger(DirectoryScanMain.class);        log.info("------- Initializing -------------------");        // First we must get a reference to a scheduler        //创建调度任务工厂        SchedulerFactory sf = new StdSchedulerFactory();        //创建调度对象        Scheduler sched = sf.getScheduler();        //创建一个调度上下文        SchedulerContext schedCtxt = sched.getContext();        //设置相关的目录监听类的        schedCtxt.put(EDirectoryScanListener.class.getName(), new EDirectoryScanListener());        log.info("------- Initialization Complete --------");        log.info("------- Scheduling Jobs ----------------");        // jobs can be scheduled before sched.start() has been called        // job 1 will run every 20 seconds        //创建相关的job详细信息        JobDetail job = newJob(DirectoryScanJob.class)            .withIdentity("job1", "group1")            .build();        //创建相关的触发器        CronTrigger trigger = newTrigger()            .withIdentity("trigger1", "group1")            .withSchedule(cronSchedule("0/20 * * * * ?"))            .build();                        // pass initialization parameters into the job        //设置相关的job参数        job.getJobDataMap().put(DirectoryScanJob.DIRECTORY_NAME, "C://mule");        job.getJobDataMap().put(DirectoryScanJob.DIRECTORY_SCAN_LISTENER_NAME, EDirectoryScanListener.class.getName());        job.getJobDataMap().put(DirectoryScanJob.MINIMUM_UPDATE_AGE, "2000");                        Date ft = sched.scheduleJob(job, trigger);        log.info(job.getKey() + " has been scheduled to run at: " + ft                + " and repeat based on expression: "                + trigger.getCronExpression());        //启动相关调度的类的        sched.start();        log.info("------- Started Scheduler -----------------");        log.info("------- Waiting five minutes... ------------");        try {            // wait five minutes to show jobs            Thread.sleep(300L * 1000L);            // executing...        } catch (Exception e) {        }        log.info("------- Shutting Down ---------------------");        sched.shutdown(true);        log.info("------- Shutdown Complete -----------------");        SchedulerMetaData metaData = sched.getMetaData();        log.info("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");}}

?

热点排行