📄 filescanjob.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 + -