导入jar包
<!-- jfinal -->
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
<version>3.0</version>
</dependency>
<!-- log -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<!-- 定时任务插件 -->
<dependency>
<groupId>cn.dreampie</groupId>
<artifactId>jfinal-quartz</artifactId>
<version>0.2</version>
</dependency>
QuartzPlugin工具类
package tools;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import com.jfinal.plugin.IPlugin;
/**
* 实现作业的调度
*/
public class QuartzPlugin implements IPlugin {
private Logger logger = Logger.getLogger(QuartzPlugin.class);
private SchedulerFactory sf = null;
private Scheduler sched = null;
private String config = null;
private Properties properties;
public QuartzPlugin(String config) {
this.config = config;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public boolean start() {
sf = new StdSchedulerFactory();
try {
sched = sf.getScheduler();
} catch (SchedulerException e) {
new RuntimeException(e);
}
loadProperties();
Enumeration enums = properties.keys();
Map<String,Map<String,String>> map = new HashMap<String,Map<String,String>>();
while (enums.hasMoreElements()) {
String key = enums.nextElement() + "";
String jobKey = key.substring(0,key.indexOf("."));
String classNameKey = jobKey+"."+"job";
String cronKey = jobKey+"."+"cron";
String enableKey = jobKey+"."+"enable";
if (isDisableJob(enableKey)) {
continue;
}
if(!map.containsKey(jobKey)){
Map<String,String> jobMap = new HashMap<String,String>();
jobMap.put("className",properties.get(classNameKey) + "");
jobMap.put("cron",properties.get(cronKey) + "");
map.put(jobKey, jobMap);
}
}
for(String jobKey : map.keySet()){
Map<String,String> jobMap = map.get(jobKey);
String jobClassName = jobMap.get("className");
String jobCronExp = jobMap.get("cron");
System.out.println(jobClassName + "===========" + jobCronExp);
Class clazz;
try {
clazz = Class.forName(jobClassName);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
JobDetail job = newJob(clazz).withIdentity(jobClassName, jobClassName).build();
CronTrigger trigger = newTrigger().withIdentity(jobClassName, jobClassName)
.withSchedule(cronSchedule(jobCronExp)).build();
Date ft = null;
try {
ft = sched.scheduleJob(job, trigger);
sched.start();
} catch (SchedulerException ee) {
new RuntimeException(ee);
}
logger.info(job.getKey() + " has been scheduled to run at: " + ft + " and repeat based on expression: "
+ trigger.getCronExpression());
}
return true;
}
private boolean isDisableJob(String enable) {
return Boolean.valueOf(properties.get(enable) + "") == false;
}
private void loadProperties() {
properties = new Properties();
InputStream is = QuartzPlugin.class.getClassLoader().getResourceAsStream(config);
try {
properties.load(is);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public boolean stop() {
try {
sched.shutdown();
} catch (SchedulerException e) {
logger.error("shutdown error", e);
return false;
}
return true;
}
}
config文件
// 定时任务
QuartzPlugin quartz = new QuartzPlugin("task.properties");
me.add(quartz);
Service类(实现Job接口)
package service;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class EmailService implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println(1);
}
}
task.properties文件( Cron表达式)
EmailService.job=service.EmailService
EmailService.cron=0 */1 * * * ?
#injob.enable=false
EmailService.enable=true