jfianl 定时任务的操作步骤

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/)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值