|
前面使用了Quartz 1.6来实现作业调度,但是只能指定运行的次数,在实际运用中就有些不足了。所以我们这次使用Quartz(http://dream.javaoop.cn/articles/**-tirgger-runner.html)提供得一种表达式,这种表达式可以灵活定义作业调度得时间、周期等等。
源码如下:
**Quartz.java
package cn.javaoop.dream.quartz;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import org.quartz.;
import org.quartz.ExecutionContext;
import org.quartz.ExecutionException;
/**
* 读取D盘文件将其内容写入C盘文件中
* @author JavaChaos
*
*/
public class **Quartz implements {
@Override
public void execute(ExecutionContext context)
throws ExecutionException {
System.out.println(context.getTrigger().getName());
try {
File file = new File(”D:/test.txt”);
if (file.canExecute()) {
FileWriter writer = new FileWriter(”C:/test.txt”);// 写入C盘文件
FileReader reader = new FileReader(”D:/test.txt”);// 读取D盘文件
writer.write(reader.read());
System.out.println(”写入成功”);
} else {
System.out.println(”文件不存在”);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
CronTriggerRunner.java
package cn.javaoop.dream.quartz;
import java.text.ParseException;
import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.Detail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Schedule**ctory;
import org.quartz.impl.StdSchedule**ctory;
/**
* 每隔5秒钟检查D盘有无test.txt,如果有则复制到C盘
*
* @author JavaChaos
*
*/
public class CronTriggerRunner {
public void task() throws SchedulerException {
// 初始化一个调度工厂
Schedule**ctory schedule**ctory = new StdSchedule**ctory();
// 初始化一个调度器
Scheduler scheduler = schedule**ctory.getScheduler();
// Detail对象相当于你要调度得任务
Detail Detail = new Detail(”Detail-c1″,
”DetailGroup-s1″, **Quartz.class);
// CronTrigger对象相当于你的配置信息
CronTrigger cronTrigger = new CronTrigger(”cronTrigger”,
”triggerGroup2″);
try {
// cron表达式
CronExpression expression = new CronExpression(”0/5 * * * * ?”);// 每隔5秒执行一次。表达式很强大
// 可以阅读一下相关帮助文档
// 把Cron表达式传给CronTrigger
cronTrigger.setCronExpression(expression);
// 传入参数
scheduler.schedule(Detail, cronTrigger);
// 开始进行调度
scheduler.start();
} catch (ParseException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
try {
CronTriggerRunner runner = new CronTriggerRunner();
runner.task();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
这个例子将上篇日志例子中得**Trigger对象换成了CronTrigger对象。CronExpression类提供得表达式,你可以自己定义运行得时间、周期。更多得使用方法可以阅读相关帮助文档。
下一次会介绍将Quartz整合入Spring中。Srping估计都不会陌生,两者整合灵活性、安全性有了更好得提升。 |
|