参考博客:
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、数据库存储数据源
通过数据库存储数据源一般各个项目都会自己实现,下篇文章中再给大家介绍