文档章节

JFinal QuartzPlugin

绝望的八皮
 绝望的八皮
发布于 2012/07/20 00:10
字数 369
阅读 3.7K
收藏 10

行业解决方案、产品招募中!想赚钱就来传!>>>

前段时间折腾了个cron4j plugin,用了一段时间发现还是要把周期控制到秒级,所以又来弄个quartz的,以前从来没用过原生的quartz,对这玩意儿也不熟悉,下了最新的2.1.5的包,从例子中拷了些代码出来把基本功能实现了。

完成了上次没做到的配置enable参数决定是否开启任务的功能。目前是用配置文件的形式实现的。

 

package com.jfinal.plugin.quartz;



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.Properties;



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 org.slf4j.Logger;

import org.slf4j.LoggerFactory;



import com.jfinal.plugin.IPlugin;



public class QuartzPlugin implements IPlugin {

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

	private SchedulerFactory sf = null;

	private Scheduler sched = null;

	private String config = "job.properties";

	private Properties properties;



	public QuartzPlugin(String config) {

		this.config = config;

	}



	public QuartzPlugin() {

	}



	@Override

	public boolean start() {

		sf = new StdSchedulerFactory();

		try {

			sched = sf.getScheduler();

		} catch (SchedulerException e) {

			new RuntimeException(e);

		}

		loadProperties();

		Enumeration enums = properties.keys();

		while (enums.hasMoreElements()) {

			String key = enums.nextElement() + "";

			if (!key.endsWith("job")) {

				continue;

			}

			String cronKey = key.substring(0, key.indexOf("job")) + "cron";

			String enable = key.substring(0, key.indexOf("job")) + "enable";

			if (isDisableJob(enable)) {

				continue;

			}

			String jobClassName = properties.get(key) + "";

			String jobCronExp = properties.getProperty(cronKey) + "";

			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 e) {

				new RuntimeException(e);

			}

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

		}

	}



	@Override

	public boolean stop() {

		try {

			sched.shutdown();

		} catch (SchedulerException e) {

			logger.error("shutdown error", e);

			return false;

		}

		return true;

	}



}

smsup.job=com.xx.xx.job.SmsUpReceiveJob 
smsup.cron=*/10 * * * * ? 
smsup.enable=true

绝望的八皮

绝望的八皮

粉丝 392
博文 22
码字总数 10505
作品 2
其它
CTO(技术副总裁)
私信 提问
加载中
此博客有 7 条评论,请先登录后再查看。
一个十分简洁清新小巧的java BBS--JFinal-BBS

这是一个java新人开发的BBS,本着:希望她能提供给java web新人一点帮助的想法。 JFinal-BBS采用了简洁强大的JFinal作为web框架,模板引擎用的是beetl,数据库用mysql,前端bootstrap框架,大...

匿名
2013/05/10
3W
22
深度吐槽hibernate

hibernate我很久都没有用了,最后一次用应该是3年前的一个企业项目,决定采用hibernate的并不是我,是我领导,我只是开发者。我所受的罪领导并不知道。正如我的每个hibernate项目那样,每次我...

闲大赋
2015/12/23
5.2K
56
JFinal集成Activiti流程引擎(不使用Spring)

大多数项目都集成Spring网上大多数教程也是Activiti集成Spring的方法集成到项目中。 一直也没有找到如何抛离Spring使用Activiti。 一开始以为集成Activit需要大量的工作,实际上非常简单。 ...

丶Lion
2016/05/26
5.7K
12
修复AOP接口自动绑定时不成功的bug

jboot 1.0-alpha5 changes更新如下: 修复AOP接口自动绑定时不成功的bug,新增了@Bean注解,方便对接口绑定的配置; 移除默认的jvm对jmx的设置,因为在docker环境下,设置网络为host模式时可...

lsbcjy
2017/07/09
86
0
JFinal 怎么查询一对多关系的数据,JSP页面怎么展示

JFinal 要在页面展示一对多关系的数据,应该怎么查询?例如要展示一个城市的信息和所属的号码段。这个怎么写?

追月小虎
2012/09/28
4.2K
3

没有更多内容

加载失败,请刷新页面

加载更多

代理服务器和反向代理服务器之间有什么区别? - What's the difference between proxy server and reverse proxy server?

问题: 代理服务器和反向代理服务器有什么区别? 解决方案: 参考一: https://stackoom.com/question/wRc/代理服务器和反向代理服务器之间有什么区别 参考二: https://oldbug.net/q/wRc/W...

技术盛宴
53分钟前
16
0
第八讲:配置外界可以访问虚拟机里面的HDFS

本节通过配置实现外界访问虚拟机Centos6.4里面的HDFS。为后续的java读写HDFS做准备 步骤有: 1、修改主机Windos7的网络配置 2、修改虚拟机Centos6.4里面的网络配置 3、修改虚拟机Centos6.4里...

刘日辉
今天
26
0
OSChina 周四乱弹 —— 不劳而获的饭好吃么?好吃!非常好吃!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 小小编辑推荐:《世界上不存在的歌 (2020重唱版)》- 陈奕迅 《世界上不存在的歌 (2020重唱版)》- 陈奕迅 手机党少年们想听歌,请使劲儿戳(这...

小小编辑
今天
31
2
从 GPU、TPU,到 Web 端、移动端,深度学习框架部署训练开始变简单

本文作者:o****0 早些时候的统计显示,今年3月,深度学习框架集中爆发。5月,有人发布可以直接在 iphone11上训练神经网络的开源项目。日前,百度开源国内首个可直接运行在 Web 端的深度学习...

百度开发者中心
昨天
16
0
如何从Git存储库中删除文件? - How can I delete a file from a Git repository?

问题: I have added a file named "file1.txt" to a Git repository. 我已将名为"file1.txt"的文件添加到Git存储库中。 After that, I committed it, added a couple of directories called......

富含淀粉
今天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部