cron4j的主要实体是调度程序。使用it.sauronsoftware.cron4j.scheduler实例,您可以在一年中的固定时间执行任务。调度程序可以每分钟执行一次任务,每五分钟执行一次,星期五10:00,2月16日12:30,但仅限于星期六,依此类推。可惜没有设置到秒的操作。

使用cron4j调度程序是一个四步操作:

创建调度程序实例。

安排你的行动。要计划一个操作,您必须告诉调度程序它必须做什么以及何时做。可以指定使用java.lang.runnable或it.sauronsoftware.cron4j.task实例的内容,也可以指定何时使用可以用字符串或it.sauronsoftware.cron4j.scheduling pattern实例表示的计划模式。

官方案例:

import it.sauronsoftware.cron4j.Scheduler;

public class Quickstart {

    public static void main(String[] args) {
// Creates a Scheduler instance.
Scheduler s = new Scheduler();
// Schedule a once-a-minute task.
s.schedule("* * * * *", new Runnable() {
public void run() {
System.out.println("Another minute ticked away...");
}
});
// Starts the scheduler.
s.start();
// Will run for ten minutes.
try {
Thread.sleep(1000L * 60L * 10L);
} catch (InterruptedException e) {
;
}
// Stops the scheduler.
s.stop();
} }

其他一些关键概念:

您可以计划需要多少任务。

您可以在需要时调度一个任务,也可以在调度程序启动之后。

也可以在调度程序正在运行时(重新调度操作)更改已调度任务的调度模式。

也可以在计划程序运行时删除以前计划的任务(取消计划操作)。

您可以启动和停止一个调度程序多少次。

您可以从一个文件调度。

您可以从任何源进行计划。

您可以向调度程序提供侦听器,以便接收有关已执行任务的事件。

您可以控制任何正在进行的任务。

您可以手动启动任务,而不使用计划模式。

您可以更改计划程序工作时区。

在将调度模式与调度程序一起使用之前,可以验证调度模式。

您可以预测调度模式何时会导致任务执行。

我做了以下调试,执行顺序还是需要多动手测试才行。

import com.jiangge.utils.task.TaskRunner;

import it.sauronsoftware.cron4j.Scheduler;
import it.sauronsoftware.cron4j.Task;
import it.sauronsoftware.cron4j.TaskExecutionContext; /**
*
* @author Uboobo
*
* 定时任务,目前有两种框架,一个是corn4j,一个是quartz
*
* 这里我们分别做下介绍
*
* corn4j其本身不支持秒,可以通过修改其源文件重新打包来实现支持,其默认规则如下
* 分:从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 分这三个时间点执行
* 星号 *:表示每一个时间点,例如 * * * * * 表示每分钟执行
* 除号 /:表示指定一个值的增加幅度。例如 * /5表示每隔5分钟执行一次(序列:0:00, 0:05, 0:10, 0:15 等等)。
* 再例如3-18/5 * * * * 是指在从3到18分钟值这个范围之中每隔5分钟执行一次(序列:0:03, 0:08, 0:13, 0:18, 1:03, 1:08 等等)。
*
*/ public class TimerTask
{ public static void taskRunner(Object task)
{ // 创建一个 Scheduler 实例.
Scheduler s = new Scheduler(); if (task instanceof Runnable) {
System.out.println("Runnable");
s.schedule("*/1 * * * *", (Runnable) task);
} else if (task instanceof Task) {
System.out.println("task");
s.schedule("*/1 * * * *", (Task) task);
}
// 自身调度执行一个任务
// s.schedule("*/1 * * * *", new Runnable()
// {
// public void run()
// {
// System.out.println("自我调用");
// }
// });
s.schedule("*/1 * * * *", new MyTaskrun());
s.schedule("*/1 * * * *", new MyTask());
// Starts the scheduler.
s.start();
// Will run for 1 minutes.
try
{
System.out.println("try");
Thread.sleep(1000L * 60L * 1L);
} catch (InterruptedException e)
{
System.out.println(e);
}
// Stops the scheduler.
s.stop();
System.out.println("stop");
}
public static void setTask()
{
// 创建一个 Scheduler 实例.执行多任务
Scheduler s = new Scheduler();
s.schedule("/1 * * * *", new MyTaskrun());
s.schedule("/1 * * * *", new MyTask());
s.start();
try
{
Thread.sleep(1000L * 60L * 1L);
} catch (InterruptedException e)
{
System.out.println(e);
}
// Stops the scheduler.
//s.stop();
} //通过使用实现接口的方式,定时执行任务
static class MyTaskrun implements Runnable{ public void run() { System.out.println("123"); }
}
//通过继承Task的方式,定时执行任务
static class MyTask extends Task{ @Override
public void execute(TaskExecutionContext arg0) throws RuntimeException
{
System.out.println("456");
}
}
public static void main(String [] args)
{
/*MyTask myTask = new MyTask();
System.out.println("start");
taskRunner(myTask);
System.out.println("next start");
MyTaskrun myTaskrun = new MyTaskrun();
taskRunner(myTaskrun);*/
setTask();
} }

关于cron4j的使用的更多相关文章

  1. 使用 Cron4j 表达式 在 Solon 里开发定时任务

    cron4j 是一个轻量级的Java任务调度工具.cron4j-solon-plugin 是 solon 对 cron4j 的适配插件 添加 maven 引用 <dependency> & ...

  2. 项目中使用Quartz集群分享--转载

    项目中使用Quartz集群分享--转载 在公司分享了Quartz,发布出来,希望大家讨论补充. CRM使用Quartz集群分享  一:CRM对定时任务的依赖与问题  二:什么是quartz,如何使用, ...

  3. Jfianl框架定时器使用配置

    Jfianl 自2.3版本后就整合了定时器到框架中,赞一个: 下面我来总结下自己使用cron4j到达定时效果的经验,不足之处还请见谅: Cron4jPlugin是作为JFinal的Plugin而存在的 ...

  4. Android开发免费类库和工具集合

    用于Android开发的免费类库和工具集合,按目录分类. Action Bars ActionBarSherlock Extended ActionBar FadingActionBar GlassA ...

  5. drools6

    <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artif ...

  6. quartz的学习和简单使用

    以前在框架中使用过,很多都是纯粹的复制粘贴,了解过用法知道如何配置,但时间久了就没什么印象了,现在重新捡起来,再次进行学习. quartz相关的介绍都已经很多了,我就不重复啰嗦,简单说一下个人的认识和 ...

  7. Solon详解(二)- Solon的核心

    Solon详解系列文章: Solon详解(一)- 快速入门 Solon详解(二)- Solon的核心 Solon详解(三)- Solon的web开发 Solon详解(四)- Solon的事务传播机制 ...

  8. Springboot mini - Solon详解(二)- Solon的核心

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  9. Plugin 插件体系

    Solon 的插件也可以叫扩展组件,相当于Spring 的 starter.Solon已经提供了大量的基础插件,但对第三方的框架适配目前较少. 插件 说明 boot插件:: 说明 org.noear: ...

随机推荐

  1. Spring Boot教程(二十三)使用Swagger2构建强大的RESTful API文档(2)

    添加文档内容 在完成了上述配置后,其实已经可以生产文档内容,但是这样的文档主要针对请求本身,而描述主要来源于函数等命名产生,对用户并不友好,我们通常需要自己增加一些说明来丰富文档内容.如下所示,我们通 ...

  2. Spring Boot教程(十八)构建RESTful API

    首先,回顾并详细说明一下在快速入门中使用的@Controller.@RestController.@RequestMapping注解.如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建 ...

  3. eclipse设置酷炫的代码颜色风格

    eclipse安装默认的代码颜色风格是“白色背景”,颜色有些刺眼,于是想到手动去改eclipse的代码颜色,但改来改去还是很难达到我们的要求,甚至有时候将背景和某些代码的颜色改成相同,导致代码看不见. ...

  4. Apache配置详解(最好的APACHE配置教程)

    From: http://aiks.blog.com.cn/archives/2006/1748482.shtml Apache的配置 Apache的配置由httpd.conf文件配置,因此下面的配置 ...

  5. centos7 安装 chrome

    1. 配置yum源 在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo cd /etc/yum.repos.d/ vim google-chrome.repo ...

  6. Oracle诊断:drop table失败[转]

    转: From <http://blog.csdn.net/cyxlxp8411/article/details/7775113> 今天在drop一张表的时候报ORA-00054错误 SQ ...

  7. nginx location的优先级

    原来一直以为location的优先级是先后顺序,结果有次项目中傻眼了,赶紧百度一下,下面的内容参考了这个链接 location表达式类型 ~ 表示执行一个正则匹配,区分大小写~* 表示执行一个正则匹配 ...

  8. jquery自动播放音频文件

    使用jquery自动播放音频文件 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  9. React Native商城项目实战06 - 设置安卓中的启动页

    1.Main 目录下新建LaunchImage.js: /** * 启动页 */ import React, { Component } from 'react'; import { AppRegis ...

  10. 洛谷P5022&P5049 旅行(及其数据加强版)

    旅行(不是加强版) 加强版 加强版数据范围: 我们注意到 也就是说要么是个树,要么是个基环树 60pts 这60分是个树,可以简单的贪心想到每次都走子树中编号最小的那个,并且把1作为根 dfs练手题 ...