使用 Cron4j 表达式 在 Solon 里开发定时任务
cron4j 是一个轻量级的Java任务调度工具。cron4j-solon-plugin 是 solon 对 cron4j 的适配插件
添加 maven 引用
<dependency>
<groupId>org.noear</groupId>
<artifactId>cron4j-solon-plugin</artifactId>
<version>1.5.11</version>
</dependency>
cron4j的cron表达式最多只允许5个部分,每个部分用空格分隔开,从左至右分别表示“分”、“时”、“天”、“月”、“周”,具体规则如下:
分:取值从 0 到 59
时:取值从 0 到 23
天:取值从 1 到 31,字母 L 可用于表示月的最后一天
月:取值从 1 到 12,可以用别名表示:jan、feb、mar、apr、may、jun、jul、aug、sep、oct、nov、dec
周:取值从 0 到 6,0表示周日,6表示周六,可以用别名表示:sun、mon、tue、wed、thu、fri、sat
以上5个部分的分、时、天、月、周又分别支持如下字符:
数字 n :表示一个具体的时间点,例如 5 * * * * 表示 5 分这个时间点时执行
逗号 , :表示指定多个数值,例如 3,5 * * * * 表示 3 和 5 分这两个时间点执行
减号 - :表示范围,例如 1-3 * * * * 表示 1 分、2 分再到 3 分这三个时间点执行
星号 * :表示每一个时间点,例如 * * * * * 表示每分钟执行
除号 / :表示指定一个值的增加幅度。例如 */5表示每隔5分钟执行一次(序列:0:00, 0:05, 0:10, 0:15 等等)
常见错误:
cron4j在表达式中使用除号指定增加幅度时与linux稍有不同。例如在linux中表达式 10/3 * * * * 的含义是从第10分钟开始,每隔三分钟调度一次,而在cron4j中需要使用 10-59/3 * * * * 来表达。
cron4j-solon-plugin 插件的 @Cron5x 注解
Cron5x 表示,支持5段的 Cron 表达式;同时支持快速配置:s m h d,例:10s (每隔10秒跑一次)
新建代码文件,试一试
- java/jobapp/JobApp
- java/jobapp/controller/Cron4jRun1
- java/jobapp/controller/Cron4jRun2
- java/jobapp/controller/Cron4jTask
- reources/application.properties
代码
- JobApp 代码
JobApp.java
//
// 启用 Cron4j 主解的任务
//
@EnableCron4j
public class JobApp {
public static void main(String[] args) {
Solon.start(JobApp.class, args);
}
}
- 使用快捷配置模式:n + ms,s,m,h,d ;使用Runnable接口开发
Cron4jRun1.java
@Cron4j(cron5x = "2s", name = "job1")
public class Cron4jRun1 implements Runnable {
@Override
public void run() {
System.out.println("我是 Cron4jRun1 (2s)");
}
}
- 使用cron5x配置模式:* * * * * ;使用Runnable接口开发
Cron4jRun2.java
@Cron4j(cron5x = "*/1 * * * *")
public class Cron4jRun2 implements Runnable {
@Override
public void run() {
System.out.println("我是 Cron4jRun2 (*/1 * * * *)");
}
}
- 使用cron5x配置模式:* * * * * ;使用Task接口开发
Cron4jTask.java
@Cron4j(cron5x = "*/1 * * * *")
public class Cron4jTask extends Task {
@Override
public void execute(TaskExecutionContext context) throws RuntimeException
System.out.println("我是 Cron4jTask (*/1 * * * *)");
}
}
通过配置,控制有name的任务
application.properties
# solon.cron4j.{job name}
#
solon.cron4j.job1.cron5x=10s #重新定义时间表达式
solon.cron4j.job1.enable=true #用任务进行启停控制
运行输出
solon.plugin:: Start loading
file:/Users/xieyuejia/WORK/work_github/solon_demo/demo10.solon_schedule/target/classes/application.properties
jar:file:/Users/xieyuejia/.m2/repository/org/noear/cron4j-solon-plugin/1.2.20/cron4j-solon-plugin-1.2.20.jar!/solonplugin/solon.extend.cron4j.properties
我是定时任务: Cron4jRun1(200ms))
solon.plugin:: End loading @129ms
我是定时任务: Cron4jRun1(200ms)
DEMO源码
使用 Cron4j 表达式 在 Solon 里开发定时任务的更多相关文章
- Solon Web 开发,一、开始
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,二、开发知识准备
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,四、请求上下文
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,五、数据访问、事务与缓存应用
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,八、校验、及定制与扩展
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,十一、国际化
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,十二、统一的渲染控制
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Solon Web 开发,十四、与Spring、Jsr330的常用注解对比
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Android开发 定时任务清理数据
原文地址:Android开发 定时任务清理数据 | Stars-One的杂货小窝 公司项目,需要整定时任务,对数据进行清理,需要在每天凌晨0:00进行数据的清理,使用了Alarm和广播的方式来实现 P ...
随机推荐
- LESS语法学习笔记
LESS 通过编写less文件来快速生成css文件,对css的语法进行了扩展 Less语法 注释 单行注释不会被编译,多行才会被编译 变量 less:定义变量用@ scss:定义变量用$ @num: ...
- 『动善时』JMeter基础 — 29、JMeter响应断言详解
目录 1.JMeter断言介绍 2.响应断言组件界面详解 3.响应断言组件的使用 (1)测试计划内包含的元件 (2)登陆接口请求界面内容 (3)响应断言界面内容 (4)查看运行结果 (5)断言结果组件 ...
- 服务器ip迁移纪要
21楼机房之前已配25网段静态ip,机架上14台服务器接22楼机房交换机,同样25网段. 实际有两种情况, a.25网段ip没有被他人占用,这种情况无需更改ip. b.该IP已被外部使用,ip冲突,无 ...
- linux中用iptables开启指定端口
linux中用iptables开启指定端口 centos默认开启的端口只有22端口,专供于SSH服务,其他端口都需要自行开启. 1.修改/etc/sysconfig/iptables文件,增加如下 ...
- openresty 学习笔记番外篇:python的一些扩展库
openresty 学习笔记番外篇:python的一些扩展库 要写一个可以使用的python程序还需要比如日志输出,读取配置文件,作为守护进程运行等 读取配置文件 使用自带的ConfigParser模 ...
- es 查询更新操作
# es 查询更新操作# _*_ coding: utf-8 _*_ import time import datetime import pymysql from elasticsearch imp ...
- GPU加速库AmgX
GPU加速库AmgX AmgX提供了一条简单的途径来加速NVIDIA GPU上的核心求解器技术.AmgX可以为模拟的计算密集型线性求解器部分提供高达10倍的加速度,特别适合于隐式非结构化方法. 它是一 ...
- 面试官:说一下JVM常用垃圾回收器的特点、优劣势、使用场景和参数设置
今天去看牙医,他问我年级轻轻牙齿怎么磨损这么严重?我说,没有人点赞的这些年,我都是咬着牙过来的. Java中的垃圾回收器几乎是面试中的必考点,无论是面试初级,中级还是高级,总免不了要问一问垃圾回收器的 ...
- Redis系列(一):安装
本系列介绍Redis,从安装到使用,太简单的使用不介绍了,介绍一些比较有意思的功能,也会介绍一些原理性的东西.本篇先介绍Redis的单实例安装.Redis还可以做到高可用,通过哨兵和集群可以做到高可用 ...
- MySQL基础练习
表的一些基本操作 1.导入sql文件 source + 文件位置 2.查询某列的数据 select col1, col2, col3 from table 3.查询所有数据 select * from ...