1.首先导入Quartz的jar包
2.编写一个QuartzPlugin类代码如下
package config;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.jfinal.plugin.IPlugin;
public class QuartzPlugin implements IPlugin {
private final Logger logger = Logger.getLogger(QuartzPlugin.class);
private static final String JOB = "job";
private String config = "job.properties";
private Properties properties;
public QuartzPlugin(String config) {
this.config = config;
}
public QuartzPlugin() {
}
private SchedulerFactory schedulerFactory;
private Scheduler scheduler;
@SuppressWarnings("unchecked")
public boolean start() {
try {
loadProperties();
} catch (IOException e) {
logger.error(e.getMessage());
return false;
}
if (properties == null) {
return false;
}
Map<String, Object> jobMap = new HashMap<String, Object>();
Enumeration<Object> enums = properties.keys();
while (enums.hasMoreElements()) {
String key = enums.nextElement() + "";
if (!key.endsWith(JOB) || !isTrue(getJobKey(key, "enable"))) {
continue;
}
String jobName = key.substring(0, key.lastIndexOf("."));
if (!jobMap.containsKey(jobName)) {
Map<String, String> jobData = new HashMap<String, String>();
jobData.put("jobClassName", properties.getProperty(jobName + ".job") + "");
jobData.put("jobName", jobName);
jobData.put("jobCronExp", properties.getProperty(jobName + ".cron") + "");
jobData.put("jobGroup", properties.getProperty(jobName + ".group") + "");
jobMap.put(jobName, jobData);
}
}
for (String mapKey : jobMap.keySet()) {
Map<String, String> jobData = (Map<String, String>) jobMap.get(mapKey);
String jobClassName = jobData.get("jobClassName");
String jobName = jobData.get("jobName");
String jobCronExp = jobData.get("jobCronExp");
String jobGroup = jobData.get("jobGroup");
Class<? extends Job> jobClass = null;
try {
jobClass = (Class<? extends Job>) Class.forName(jobClassName);
} catch (ClassNotFoundException e) {
logger.error(e.getMessage());
return false;
}
JobDetail job = JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroup).build();
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger", jobGroup)
.withSchedule(CronScheduleBuilder.cronSchedule(jobCronExp)).build();
try {
schedulerFactory = new StdSchedulerFactory();
try {
scheduler = schedulerFactory.getScheduler();
} catch (SchedulerException e) {
logger.error(e.getMessage());
return false;
}
if (scheduler == null) {
logger.error("scheduler is null");
return false;
}
scheduler.scheduleJob(job, trigger);
scheduler.start();
} catch (SchedulerException e) {
logger.error(e.getMessage());
return false;
}
}
return true;
}
public boolean stop() {
try {
scheduler.shutdown();
} catch (SchedulerException e) {
logger.error(e.getMessage());
return false;
}
return true;
}
private void loadProperties() throws IOException {
properties = new Properties();
InputStream is = QuartzPlugin.class.getClassLoader().getResourceAsStream(config);
properties.load(is);
}
private String getJobKey(String str, String type, String defaultValue) {
String key = getJobKey(str, type);
if (key == null || "".equals(key.trim()))
return defaultValue;
return key;
}
private String getJobKey(String str, String type) {
return str.substring(0, str.lastIndexOf(JOB)) + type;
}
private boolean isTrue(String key) {
Object enable = properties.get(key);
if (enable != null && "false".equalsIgnoreCase((enable + "").trim())) {
return false;
}
return true;
}
}
3.然后添加配置文件:在rec文件下添加一个job.properties文件内容如下
# s m h d m w(?) y(?) second minute hour date month week year //这是时间格式
# partyQuart job at 00:01 all day
partyQuart.job=com.wlkj.common.config.StatisticExecutor //要执行的定时任务的类的路径
partyQuart.cron=0 1 0 ? * * //设置定时时间如每分钟执行一次
partyQuart.enable=true //不知道
partyQuart.group=1 //定时组,如果有多个就要一次增加
# orgcheck job at 01:00
orgcheck.job=com.wlkj.common.config.OrgQuarter
orgcheck.cron=0 0 1 * * ?
orgcheck.enable=true
orgcheck.group=2
# partyIntegral job at 00:01 all day
partyIntegral.job=com.wlkj.common.config.PartyIntegralExecutor
partyIntegral.cron=0 1 0 ? * *
partyIntegral.enable=true
partyIntegral.group=3
# partyMonth job at 00:01 all day
partyMonth.job=com.wlkj.common.config.PartyMonthStatisticExecutor
partyMonth.cron=0 1 0 ? * *
partyMonth.enable=true
partyMonth.group=4
4.在congfig配置类中要读取job.properties文件
public void configPlugin(Plugins me) {
// 定时任务插件
QuartzPlugin plugin = new QuartzPlugin("job1.properties");
me.add(plugin);
}
5.接下来我们要写一个定时任务类,定时类要继承job类
如:
public class OrgQGatP implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("开始执行定时任务");
}
去quartz官网下载最新的定时任务jar包(http://www.quartz-scheduler.org/)