惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
IT之家
IT之家
Last Week in AI
Last Week in AI
J
Java Code Geeks
L
LangChain Blog
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
博客园 - Franky
博客园 - 司徒正美
月光博客
月光博客
博客园 - 叶小钗
Vercel News
Vercel News
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
GbyAI
GbyAI
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
H
Help Net Security
G
Google Developers Blog
D
DataBreaches.Net

祈雨的笔记

安全多方计算MPC spark原理解析 kueue执行源码分析 spark on k8s执行源码分析 spark-operator源码解析 系统压测遇到的缓存击穿问题 我的世界PC与安卓联机 蚂蚁金服流量投放平台的AIG改造 G1大对象致Old区占用率高 日志打印导致接口响应率下跌分析 Groovy加载类导致OOM分析 ERROR日志打印导致CPU满载 记OceanBase死锁超时 应用发版期间服务响应超时 Ark Serverless初探 系统优化复盘一二三 The user specified as a definer does not exist Kong网关初探 API网关选型调研 CPU火焰图常用工具 配置中心选型调研 root操作Nginx导致用户组错误 基于Proxifier使用代理 FastJSON字段智能匹配踩坑 Nacos初探 记一次Nginx服务器CPU满荷载故障 基于券系统分库分表的思考 limit不参与SQL成本计算致索引失效 Linux常用性能监控命令 golang低版本http2偶现400
Quartz定时任务框架
祈雨的笔记 · 2017-10-01 · via 祈雨的笔记

1、简介

quartz是一个执行定时任务的一个java框架。

2、cronExpression规则

quartz有一套自己的时间表达式,用于设定定时任务的触发时间。
其格式为:秒 分 时 日 月 周 年,其中年为选填,日和周不能同时使用,即有一个为”?”。
例:0 0 0 * * ?,解读后的意思是每天的0时0分0秒,即每天的零点。

时间 范围 可使用特殊符号
0-59 , - * /
0-59 , - * /
0-23 , - * /
1-31 , - * ? / L W C
1-12或JAN-DEC , - * /
1-7或SUN-SAT(1对应周日、2对应周一。。。7对应周六) , - * ? / L C #
年(可选) 1970-2099 , - * /

特殊符号 说明
* 指整个时段,即每一秒、每一分钟、每一小时
- 指区间范围,例”小时”字段为”10-12”,即10点~12点间
, 指数个值,例”周”字段为”MON,WEB,FRI”,即周一、周三、周五
/ 指”每“,例”0/15“,即从0开始,每15执行一次
L 用于日、周,表示每月最后一天或者每月最后的周几。例”周”字段为”6L”表示每月最后一个周五
W 最近的一个工作日,如“15w”为本月15号最近的一个工作日
# 每月第n周的周n,例“6#3”或“FRI#3”表示每月的第三个周五

3、Quartz简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {

}
}
public class QuartzManager {
public static void addJob(String jobName, Class<? extends Job> jobClass,
String cronExpression) throws Exception {
Scheduler sched = new StdSchedulerFactory().getScheduler();
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(jobName).build();
Trigger trigger = TriggerBuilder.newTrigger()
.withSchedule(CronScheduleBuilder.cronSchedule(cronExpression))
.startNow().build();
sched.scheduleJob(jobDetail, trigger);
sched.start();
}

public static void main(String[] args) {

String cronExpression="0 0 0 * * ?";

addJob("myjob", MyJob.class, cronExpression);
}
}

4、Spring整合

applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

<property name="targetObject" ref="作业的bean"/>

<property name="targetMehtod" value="方法名"/>

<property name="concurrent" value="false"/>
</bean>


<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="jobDetail"/>
<property name="cronExpression" value="cronExpression表达式"/>
</bean>


<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger"/>
</list>
</property>
</bean>

5、任务线程池

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Configuration
public class ScheduledThreadPoolConfig implements SchedulingConfigurer {

@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
}

@Bean(name="taskExecutor",destroyMethod="shutdown")
public Executor taskExecutor() {
return Executors.newScheduledThreadPool(20);
}

}