⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filescanjob.java

📁 定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目, 随著开发的版本上来, 他已经脱离只是写在程序里面的计时器, 在指定的时间或区间, 处理所指定的事件. 也加入了 se
💻 JAVA
字号:
/*
 * Copyright James House (c) 2001-2004
 * 
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met: 1.
 * Redistributions of source code must retain the above copyright notice, this
 * list of conditions and the following disclaimer. 2. Redistributions in
 * binary form must reproduce the above copyright notice, this list of
 * conditions and the following disclaimer in the documentation and/or other
 * materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package org.quartz.jobs;

import java.io.File;

import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerContext;
import org.quartz.SchedulerException;
import org.quartz.StatefulJob;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Inspects a file and compares whether it's "last modified date" has changed
 * since the last time it was inspected.  If the file has been updated, the
 * job invokes a "call-back" method on an identified 
 * <code>FileScanListener</code> that can be found in the 
 * <code>SchedulerContext</code>.
 * 
 * @author jhouse
 * @see org.quartz.jobs.FileScanListener
 */
public class FileScanJob implements StatefulJob {

    public static String FILE_NAME = "FILE_NAME";
    public static String FILE_SCAN_LISTENER_NAME = "FILE_SCAN_LISTENER_NAME";
    private static String LAST_MODIFIED_TIME = "LAST_MODIFIED_TIME";
    
    public FileScanJob() {
    }

    /** 
     * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
     */
    public void execute(JobExecutionContext context) throws JobExecutionException {
        
        Log log = LogFactory.getLog(getClass());
        
        JobDataMap data = context.getJobDetail().getJobDataMap();
        SchedulerContext schedCtxt = null;
        try {
            schedCtxt = context.getScheduler().getContext();
        } catch (SchedulerException e) {
            throw new JobExecutionException("Error obtaining scheduler context.", e, false);
        }
        
        String fileName = data.getString(FILE_NAME);
        String listenerName = data.getString(FILE_SCAN_LISTENER_NAME);
        
        if(fileName == null)
            throw new JobExecutionException("Required parameter '" + 
                    FILE_NAME + "' not found in JobDataMap");
        if(listenerName == null)
            throw new JobExecutionException("Required parameter '" + 
                    FILE_SCAN_LISTENER_NAME + "' not found in JobDataMap");

        FileScanListener listener = (FileScanListener)schedCtxt.get(listenerName);
        
        if(listener == null)
            throw new JobExecutionException("FileScanListener named '" + 
                    listenerName + "' not found in SchedulerContext");
        
        long lastDate = -1;
        if(data.containsKey(LAST_MODIFIED_TIME))
            lastDate = data.getLong(LAST_MODIFIED_TIME);
        
        File file = new File(fileName);
        
        if(!file.exists()) {
            log.warn("File '"+fileName+"' does not exist.");
            return;
        }
        
        long newDate = file.lastModified();
        
        if(lastDate > 0 && (newDate != lastDate)) {
            // notify call back...
            log.info("File '"+fileName+"' updated, notifying listener.");
            listener.fileUpdated(fileName); 
        }
        else
            log.debug("File '"+fileName+"' unchanged.");
        
        data.put(LAST_MODIFIED_TIME, newDate);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -