Java定时任务3:Jcrontab的使用

参考博客:
http://www.cnblogs.com/shenliang123/p/3231312.html 几种任务调度Java实现与比较

http://blog.csdn.net/jijijiujiu123/article/details/9086847 网站同事写的(chenrui)

http://blog.csdn.net/maskice/article/details/1670070进阶版

初学Jcrontab感觉非常好,用它来做一个定时程序非常容易,而且方便。有关Jcrontab的介绍和它的定时文件的格式,下面会介绍,这里先来讲解一下它在程序中的具体应用。在这里,我们先约定数据源这个概念,“数据源”(我暂且这样称呼),它主要是用来由Jcrontab按照定时规则要处理的类和程序,可以是多个,也可以是一个,我按照Jcrontab提供的方法通常是将它写到普通文件,XML文件或数据库中。这样,按照Jcrontab的规则,提供给Jcrontab这些数据源就可以使用Jcrotab的定时功能了。

根据Jcrontab存储的不同的数据源,我们可以分成以下几个:

  • 普通文件来存储
  • 数据库存储
  • XML文件存储

下面先介绍一下有关Jcrontab用到的配置文件:

  • jcrontab.properties配置文件,这是用来启动Jcrontab的必需文件。在Jcrontab的发布包中已经有一个完整格式的jcrontab.properties文件了,里面有它的样例,我们只需要根据我们自己的应用需要,来使用具体的配置属性,来构造自己的jcrontab.properties。
  • 还有一个配置文件就是我们自己的xml定时配置文件。(若我们采用的数据源是普通文件的话)这个文件是用来写负责处理的定时程序的,里面按照规定好的规则来处理规定好的类或类的方法。
  • 若我们采用数据库存储数据源的话,那么,我们就需要配置一个数据库的信息,在jcrontab.properties文件中已经有一个例子了,我们可以改成我们需要的数据库配置信息,这个很容易。
  • 若要采用的是XML形式的文件,那么我们要指定数据源是XML的,同时指定处理XML的解析器,这里用的是Apache的Xerces。
  • 在程序中随时可以添加数据源,通过Crontab中的newTask方法,就可以随时添加。

1、普通文件存储数据源

1.首先要下载JCrontab的相关jar包,Jcrontab-2.0-RC0.jar。

2.在web.xml文件中配置JCrontab

	<servlet>
		<servlet-name>LoadOnStartupServlet</servlet-name>
		<servlet-class>org.jcrontab.web.loadCrontabServlet</servlet-class>
		<init-param>
			<param-name>PROPERTIES_FILE</param-name>
			<!-- 此处路径是绝对路径 --> 
			<param-value>D:/Workspaces/TimerAndCron/config/crontab/jcrontab.properties</param-value>
		</init-param>
		<load-on-startup>200</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>LoadOnStartupServlet</servlet-name>
		<url-pattern>/Startup</url-pattern>
	</servlet-mapping>

3.jcrontab.properties文件

#指定crontab文件的位置
org.jcrontab.data.file = D:/Workspaces/TimerAndCron/config/crontab/crontab
#配置持久化文件为org.jcrontab.data.FileSource,也就是普通文件
org.jcrontab.data.datasource = org.jcrontab.data.FileSource
org.jcrontab.Crontab.refreshFrequency = 3
org.jcrontab.log.Logger=org.jcrontab.log.Log4JLogger
org.jcrontab.log.log4J.Properties=D:/Workspaces/TimerAndCron/config/log4j.properties

4.crontab文件(描述了任务的调度安排)

# Tasks planification configuration file.
# IMPORTANT: All the index begin in 0, except day of month and

#       month that begin in 1.

#              minute         0-59
#              hour           0-23
#              day of month   1-31
#              month          1-12
#              day of week    0-6 (0 is Sunday)
 

#每两分钟执行一次 CrontabMainTest1的 main方法
 */2 * * * * com.kang.timerandcron.cron.process.CrontabMainTest#main Hello World

#每一分钟执行一次 CrontabRunTest1的 run方法,并传入参数Hello World
 * * * * * com.kang.timerandcron.cron.process.CrontabRunTest#run Hello World

5.定时任务CrontabMainTest和CrontabRunTest的代码

public class CrontabMainTest {

	public static void main(String[] args) {

		System.out.println(new Date());
		System.out.print("调用main方法   ");
		if (args.length > 0 && args != null) {
			for (String str : args) {
				System.out.print(str + " ");
			}
			System.out.println();
		}
	}
}

 

/**
 * 需要实现Runnable接口,可以接收参数
 * @author kang
 *
 */
public class CrontabRunTest implements Runnable {

	private String[] args;

	public CrontabRunTest(String[] args) {

		this.args = args;
	}

	public void run() {

		System.out.println(new Date());
		System.out.print("调用run方法   ");
		if (args.length > 0 && args != null) {
			for (String str : args) {
				System.out.print(str + " ");
			}
			System.out.println();
		}
	}
}


2、XML文件存储数据源

1.导入相关的jar包:Jcrontab-2.0-RC0.jar,xerces.jar

2.和上面“普通文件持久化”的2 相同

3.Jcrontab.properties文件

#指定xml配置文件的地址(绝对路径)
org.jcrontab.data.file=D:/Workspaces/TimerAndCron/config/crontab/crontab.xml
#配置xml解析器
org.xml.sax.driver=org.apache.xerces.parsers.SAXParser
#指定持久化文件为xml文件
org.jcrontab.data.datasource=org.jcrontab.data.XMLSource

4.crontab.xml配置文件(描述了任务的调度安排)

<?xml version="1.0" encoding="utf-8"?>
<crontab>

	<!-- 每分钟的30秒时和40秒时执行 -->
	<crontabentry id="001">
    <seconds>10,20,30,40,50</seconds>
    <minutes>*</minutes>
    <hours>*</hours>
    <daysofmonth>*</daysofmonth>
    <months>*</months>
    <daysofweek>*</daysofweek>
    <years>*</years>
    <bussinesdays>true</bussinesdays>
    <startDate></startDate>
    <endDate></endDate>
    <class>com.kang.timerandcron.cron.process.CrontabRunTest</class>
    <method>run</method>
    <parameters>hello world</parameters>
    <description></description>
	</crontabentry>
	
	<!-- 每天10:52:00执行 -->
	<crontabentry id="002">
    <seconds>0</seconds>
    <minutes>52</minutes>
    <hours>10</hours>
    <daysofmonth>*</daysofmonth>
    <months>*</months>
    <daysofweek>*</daysofweek>
    <years>*</years>
    <bussinesdays>true</bussinesdays>
    <startDate></startDate>
    <endDate></endDate>
    <class>com.kang.timerandcron.cron.process.CrontabMainTest</class>
    <method>main</method>
    <parameters>hello world</parameters>
    <description></description>
	</crontabentry>
	
</crontab>

5.和上面“普通文件持久化”的5 相同

 

3、数据库存储数据源

通过数据库存储数据源一般各个项目都会自己实现,下篇文章中再给大家介绍

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值