jfinal定时任务基本用法

导入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

猜你喜欢

转载自my.oschina.net/u/3639290/blog/1631071