由于最近的项目是非Maven项目实现定时任务调度,通过上网查找得知JFinal-ext的jar封装了对Quartz定时器的调用,但是按照操作进行调试,出现找不到com.jfinal.log.Log类的错误信息,后来得知ext没有更新,不过很感谢@JFinal的帮助,用邮箱给我解决方案。下面为解决问题的步骤:
下面链接为项目中需要的jar包和Cron4jPlugin、ITask:http://pan.baidu.com/s/1eSLm9to
步骤如下:
首先需要项目的jar包,将cron4j-2.2.5.jar放在项目中lib目录下
将Cron4jPlugin和接口ITask放到项目中,我放在继承至JFinalConfig的类的同包下
在Cron4j配置文件中设置如下,此文件起名为task.properties,文件中newCron=* * * * *
表达每分钟执行一次。代码如下:
-
- cron4j=newCron, registerCron, foreignExchangeCron
- #newCron
- newCron.cron=* * * * *
- newCron.class=cn.cyansoft.xine.task.NewTask
- newCron.enable=true
- #registerCron
- registerCron.cron=* * * * *
- registerCron.class=cn.cyansoft.xine.task.RegisterTask
- registerCron.enable=true
- #foreignExchange
- foreignExchangeCron.cron=* * * * *
- foreignExchangeCron.class=cn.cyansoft.xine.task.ForeignExchangeTask
- foreignExchangeCron.enable=true
在继承至JFinalConfig类中的configPlugin,加载配置
-
- public void configPlugin(Plugins me) {
- me.add(new Cron4jPlugin(PropKit.use("task.properties")));
- }
在任务类中实现ITask接口,在run中写定时任务
让自己的Task实现ITask杰克,或者实现Runable接口也可以。
假定这个MyTask在com.xxx包下
-
- public class MyTask implements ITask {
- public void run() {
- // 这里放被执行的调试任务代码
- }
- public void stop() {
- // 这里的代码会在 task 被关闭前调用
- }
- }
到以上为止能够实现定时调度任务,由于我的项目是Jfinal-weixin项目,定时给部分用户发送客服消息,出现如下错误
http://www.jfinal.com/feedback/138,已反馈并已解决在此反馈中。
将我解决的方案分享一下,希望能帮到像我一样遇到这样问题的伙伴们。
补充
一、关于定时器配置文件(task.properties)的参数解释:
- 以上配置中 cron4j 是入口,后面的 newCron 是任务名称,可以随便起名,这个例子中起的名字是 "newCron"
- 一旦起了这个名称,后面的配置就是以这个 "newCron" 打头,例如上面的 newCron.cron、newCron.class等等
- newCron.cron=.... 配置调试表达式,具体的含义在 Cron4jPlugin 源代码中有说明,切记:cron 表达式只有五个部分,
- taskName.class=... 配置任务的实现类,指向最前面的 MyTask 类,注意类的路径配置正确
- taskName.enable=... 配置该任务是否有效,如果为 false,则不会被处理,相当于一个开关变量,这个配置可以省略,省略时默认值为 true
- 再说明一点,假定 cron4j=abc 这么配置,那么后面的三个配置如下:
- abc.cron=0 * * * *
- abc.class=com.xxx.MyTask
- abc.enable=true
- 最后再被被一点,cron4j 可以同时配置多个任务,以逗号分隔,以下代码同时配置了两个任务
- cron4j=taskAaa, taskBbb
- taskAaa.cron=0 * * * *
- taskAaa.class=com.xxx.TaskOne
- taskAaa.enable=true
- taskBbb.cron=0 * * * *
- taskBbb.class=com.xxx.OtherTask
- taskBbb.enable=true
二、以下贴出 Cron4jPlugin 中的部分注释,说明了如何使用:
- * cron 表达式由五部分组成:分 时 天 月 周 * 分 :从 0 到 59 * 时 :从 0 到 23 * 天 :从 1 到 31,字母 L 可以表示月的最后一天 * 月 :从 1 到 12,可以别名:jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov" and "dec" * 周 :从 0 到 6,0 表示周日,6 表示周六,可以使用别名: "sun", "mon", "tue", "wed", "thu", "fri" and "sat" * * 数字 n:表示一个具体的时间点,例如 5 * * * * 表示 5 分这个时间点时执行 * 逗号 , :表示指定多个数值,例如 3,5 * * * * 表示 3 和 5 分这两个时间点执行 * 减号 -:表示范围,例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行 * 星号 *:表示每一个时间点,例如 * * * * * 表示每分钟执行 * 除号 /:表示指定一个值的增加幅度。例如 n/m表示从 n 开始,每次增加 m 的时间点执行
三、若是maven项目用户:
- <dependency>
- <groupId>it.sauronsoftware.cron4j</groupId>
- <artifactId>cron4j</artifactId>
- <version>2.2.5</version>
- </dependency>