JFinal Quartz 2.2.1插件

参照ext的自己写了一个,2.2.1版本运行OK,只依赖Quartz和log4j,比较简单的。

package com.forg.plugin;

import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;

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.log.Logger;
import com.jfinal.plugin.IPlugin;

public class QuartzPlugin implements IPlugin {

	private final Logger logger = Logger.getLogger(getClass());

	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;
		}

		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;
		}

		Enumeration<Object> enums = properties.keys();
		while (enums.hasMoreElements()) {
			String key = enums.nextElement() + "";
			if (!key.endsWith(JOB) || !isTrue(getJobKey(key,"enable"))) {
                continue;
            }

			String jobClassName = properties.get(key) + "";
			String jobName 	= 	  key.substring(0,key.lastIndexOf("."));
			String jobCronExp =   properties.getProperty(getJobKey(key,"cron")) + "";
			String jobGroup 	= properties.getProperty(getJobKey(key,"group","jobGroup1"));

			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 {
				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;
    }

}

JFinal Quartz 2.2.1插件,布布扣,bubuko.com

时间: 2024-08-27 10:53:57

JFinal Quartz 2.2.1插件的相关文章

一键生成JFinal模块代码(Eclipse插件)

代码生成工具在日常开发中是必不可少,因为代码生成工具能够一键生成代码,减少重复的工作,缩短开发周期.五一期间个人开发了一个基于Eclipse插件的代码生成工具(jfinal-generator),这里分享一下. jfinal-generator支持JFinal官方代码生成策略,同时也支持用户自定义代码生成策略,并支持多种数据作为数据源. 1.首先贴出一张效果图,如下图 2.以JFinal官方的Generator为例,生成BaseModel和Model等相关文件,如下图(gif) 3.自定义代码生

JFinal redis cluster集群插件

JFinal 框架到了2.1版本号,可是依旧仅仅支持redis的主从集群,没有看到Cluster集群的插件.笔者照着主从的插件方式,改了改,实现了个简单的插件,先使用起来,兴许会更新完好版本号. 插件地址:点击打开链接 附上源代码: package com.sxt.jfinal.rediscluster; import java.util.Set; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis

JFinal 中的cron4j定时插件

1.下载cron4j的jar包,并放入classpath http://www.sauronsoftware.it/projects/cron4j/download.php 2.编写Cron4jPlugin.java package com.welicai.app.common.plugin; import it.sauronsoftware.cron4j.InvalidPatternException; import it.sauronsoftware.cron4j.Scheduler; im

JFinal - scheduler 插件做定时任务

基于 jfinal 框架做定时任务可以使用插件 jfinal-scheduler 插件来解决. 下面是我在项目中使用 jfinal-scheduler 的例子. 配置插件,在自定义的 JFinalConfig 类中引入此插件: /** * 配置插件 */ public void configPlugin(Plugins me) { // ... // 定时器插件 SchedulerPlugin sp = new SchedulerPlugin(); Runnable task = new Tas

Jfinal QuartzPlugin 简单使用案例

之前一直使用spring quartz感觉还挺好用的,就想着jfinal是不是也可以使用quartz插件,于是发现了QuartzPlugin和jfinal-scheduler<参考:https://www.oschina.net/p/jfinal-scheduler>, 都挺好用的,本文章简单讲解一下QuartzPlugin的使用.----jstarseven 首先添加maven依赖: 1 <!--jfinal quartz 定时任务--> 2 <dependency>

定时器(Quartz)快速入门

Quartz概述 Quartz中的触发器 Quartz中提供了两种触发器,分别是CronTrigger和SimpleTrigger. SimpleTrigger 每 隔若干毫秒来触发纳入进度的任务.因此,对于夏令时来说,根本不需要做任何特殊的处理来"保持进度".它只是简单地保持每隔若干毫秒来触发一次,无论你的 SimpleTrigger每隔10秒触发一次还是每隔15分钟触发一次,还是每隔24小时触发一次. CronTrigger 在特定"格林日历"时刻触发纳入进程的

学习quartz定时

学习资料: http://www.cnblogs.com/Rozdy/p/4274356.html http://www.cnblogs.com/Rozdy/p/4284339.html https://www.ibm.com/developerworks/cn/java/j-quartz/ http://www.cnblogs.com/itred/p/4125544.html 补充说明: 为quartz从版本1.8开始,配置文件有所改动,以前quartz自带的插件是JobInitializat

Quartz(GUI)图形界面程序----Quartz Web

下载.设置和运行Quartz(GUI)图形界面程序----Quartz Web 一.获取Quartz Web程序(Quartz GUI).早期的 Quartz 框架开发者意识到一个 GUI 对于某类用户群体是必需的.几年前,一个 Web 应用被创立,它可用于管理 Quartz 框架.虽说是历经了几年有相当投入的开发,但不得不说的,总是时断时续的.近来出现有更多的要求对这个应用的更新与支持,因而又重新吸引了新的开发者自愿的工作并使之保持不断更新.这个应用就是知名的 Quartz Web 程序.Qu

quartz详解2:quartz由浅入深

http://blog.itpub.net/11627468/viewspace-1763498/ 一.quartz核心概念 先来看一张图:     scheduler 任务调度器 trigger 触发器,用于定义任务调度时间规则 job 任务,即被调度的任务 misfire 错过的,指本来应该被执行但实际没有被执行的任务调度 Job:是一个接口,只有一个方法void execute(JobExecutionContext context),开发者实现该接口定义运行任务,JobExecution