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;

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jfinal.plugin.IPlugin;
import com.welicai.app.test.Testjob;

public class Cron4jPlugin implements IPlugin {

	private Logger logger = LoggerFactory.getLogger(getClass());
	private Scheduler scheduler = null;
	private String config = "job.properties";
	private Properties properties;

	public Cron4jPlugin(String config) {
		this.config = config;
	}

	public Cron4jPlugin() {

	}

	@SuppressWarnings({ "rawtypes"})
	public boolean start() {
		scheduler = new Scheduler();
		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);
			}
			try {

				scheduler.schedule(jobCronExp, (Runnable) clazz.newInstance());
			} catch (InvalidPatternException e) {
				throw new RuntimeException(e);
			} catch (InstantiationException e) {
				throw new RuntimeException(e);
			} catch (IllegalAccessException e) {
				throw new RuntimeException(e);
			}
			scheduler.start();
			logger.info(jobCronExp + " has been scheduled to run at: " + new Date()
					+ " and repeat based on expression: "
					);
		}
		return true;
	}

	private boolean isDisableJob(String enable) {
		return Boolean.valueOf(properties.get(enable) + "") == false;
	}

	private void loadProperties() {
		properties = new Properties();
		InputStream is = Cron4jPlugin.class.getClassLoader()
				.getResourceAsStream(config);
		try {
			properties.load(is);
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	public boolean stop() {
		scheduler.stop();
		return true;
	}

	public static void main(String[] args) throws InterruptedException {
		 Cron4jPlugin plugin = new Cron4jPlugin();
		 plugin.start();
		 System.out.println("执行成功!!!");
		 Thread.sleep(5000);
		// plugin.stop();
	}

}

3、创建一个定时任务类(必须实现Runnable接口)

public class Testjob implements Runnable {

	public void run() {
	    System.out.println("Current system time: " + new Date());
	    System.out.println("Another minute ticked away...");
	}

}

4、在classpath下加入job.properties,然后配置上刚才创建的任务类(1分钟执行一次)

UpdateOrderStatusJob.job=com.welicai.app.test.Testjob
UpdateOrderStatusJob.cron=*/1 * * * *
UpdateOrderStatusJob.enable=true

5、把Cron4jPlugin加入jfinal的核心配置类configPlugin方法

/**
	 * 配置插件
	 */
	public void configPlugin( Plugins me ) {

		// 配置C3p0数据库连接池插件
	    C3p0Plugin c3p0Plugin = new C3p0Plugin( getProperty("url"), getProperty("user"), getProperty("pwd") );
	    me.add( c3p0Plugin );

	    // 配置ActiveRecord插件
	    ActiveRecordPlugin arp = new ActiveRecordPlugin( c3p0Plugin );
	    arp.setShowSql( Boolean.valueOf( getProperty("showSql") ) );
	    me.add( arp );
	    // 配置Cron4jPlugin插件
               me.add(new Cron4jPlugin());
	}

6、启动项目试一下吧(注意:cron4j只能精确到分,不能到秒,但是应该够用了,时间语法同Linux的crontab)

时间: 2024-10-13 13:54:28

JFinal 中的cron4j定时插件的相关文章

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.CronT

Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大多基于jQuery和它的插件.而且现在Angular2的组件生态还不是很完善,我们在编写Angular的时候也许会想要用到jQuery.本篇文章就简单介绍下在Angular2中使用jQuery 如果你不知道怎么搭建Angular2开发环境,请参考我之前写这篇文章:Angular2入门系列教程1-使用

分享在MVC3.0中使用jQuery DataTable 插件

前不久在网络上看见一个很不错的jQuery的DataTable表格插件.后来发现在MVC中使用该插件的文章并不多.本文将介绍在MVC3.0如何使用该插件.在介绍该插件之前先简单介绍一下,推荐该插件的原因.在项目中我使用jqgrid比较多.但是发现当进行样式调整时jqgrid的样式常常会让美工头疼.而datatable插件却是一个轻量级的jQuery插件.当我通过浏览器查看该js插件rander后的源码.发现只是一个简单的html table,非常简洁.那么在没有特殊要求的情况下使用这个插件,开发

如何在Dreamweaver中使用emmet(ZenCoding)插件

Emmet插件以前被称作为Zen Coding,是一个文本编辑器的插件,它可以帮助您快速编写HTML和CSS代码,从而加速Web前端开发.早在2009年,Sergey Chikuyonok写过一篇文章,提出编写HTML和CSS的新方法.这一革命性的插件指的就是Zen Coding,经过很多开发者多年来的努力与帮助,现在已达到了一个新的水平.也就是今天所说的Emme插件. 在这篇文章中,我们将要学习如何在Dreamweaver中使用emmet(ZenCoding)插件,至于使用方法我曾经写过一篇文

bootstrap设计网站中添加代码高亮插件

这款插件的名字叫做google-code-prettify 使用该插件之前的效果: 使用插件之后的效果: 接下来说步骤: (1)下载两个文件 http://codecloud.sinaapp.com/google-code-prettify/prettify.css http://codecloud.sinaapp.com/google-code-prettify/prettify.js (2)在head中引入这两个文件 <link href="google-code-prettify/p

eclipse中(装了插件m2eclipse后的)导入maven工程显示&quot;感叹号&quot;

有时候导入一些开源工程(maven结构的),在eclipse中(装了插件m2eclipse后的)该工程前面会有一个小的红色感叹号,但点开工程后没有发现有打小红叉的内容,这种情况其实大部分是jar包依赖出来问题造成编译不能通过,如果有耐性可以在src里挨个点击代码打开,运气好的话就会发现有报错内容(import 包名 not resloved),找到对应的jar包在maven dependencies下点击相关jar包发现无法打开(正常加载的jar是可以展开目录结构的).如果怕查找src麻烦,也可

IDEA14中安装go语言插件

在IntelliJ IDEA14中安装go语言插件 go语言的集成开发环境仍不成熟,试用了liteide,感觉很不适应,弹出菜单对程序员的干扰太大.所以就试大牌的IntelliJ IDEA,这工具本来是JAVA开发阵营的,不过它已经变为一个非常强大的支持多种语言的集成环境了. 1.go环境 下载Go1.5.1(由于国内伟大的墙,golang.org访问被墙,搞点技术真是不易,从Golang中国的的百度云盘下载是不错的选择,http://pan.baidu.com/s/1hq1mrDM),安装很方

JFinal中使用JSP的自定义Tag解决I18N

1. 设计原由 由于JFinal的国际化(I18N)支持在JSP中支持不好,因此,萌生了解决这一短板的念头. 实现时也考虑了几种方式,最终决定采用JSP中最原始的标签.因为自定义标签在JSP中容易实现,内容灵活且功能比较强大,可扩展性好. 2. I18N标签 自定义的I18N标签需要针对I18N的各个接口做最好的支持,使用<jf:i18n />作为标签名,下面是JFinal中I18N类的几个接口: public static String getText(String key) public 

Eclipse中的一个小插件easyExplorer--用于打开文件所在目录

最近格式化了硬盘,里面的诸多有价值的插件都没了,开发时需要打开java文件所在的目录,每次都很麻烦,实在无法忍受,就又重新下载了一个小插件,用以很方便的打开文件所在目录: easyExplorer 仅有7kb 一:官方下载地址: http://sourceforge.net/projects/easystruts/ 由于天朝网络问题,等个大概十来秒的时间出现下图: 二:配置方式: 直接将下载后的文件:org.sf.easyexplore_1.0.4.jar复制到eclipse下的plugins下