高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

spring quartz执行定时任务

目录
  1. 1. 需要执行任务的业务类
  2. 2. quzrtz.xml 配置
  3. 3. Cron常用的表达式

最近定时任务总是执行延后,定时任务执行比较频繁,而且时间比较长
查了许久,发现自己没有配置定时任务线程数量
在此回顾一下quartz配置。

需要执行任务的业务类

1
2
3
4
5
6
7
8
9
10
public class syncAppTrigger {
@Autowired
private SyncApp syncApp;

public void excute() {

syncApp.delete();
syncApp.sync();
}
}

quzrtz.xml 配置

线程池配置,默认是10个,在此修改为50个

1
2
3
4
5
6
<!-- 线程执行器配置,用于任务注册 -->  
<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="50" />
<property name="maxPoolSize" value="50" />
<property name="queueCapacity" value="500" />
</bean>

任务启动

1
2
3
4
5
6
7
8
9
10
<!-- schedule的配置信息 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
lazy-init="false">
<property name="triggers">
<list>
<ref bean="syncAppTrigger" />
</list>
</property>
<property name="taskExecutor" ref="executor" />
</bean>

配置触发器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!-- trigger的配置信息 -->

<!-- 应用定时任务 -->
<bean id="syncApp" class="com.focustech.fds.quartz.trigger.sync.syncAppTrigger" />
<bean id="syncAppTask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="syncApp" />
</property>
<property name="targetMethod">
<value>excute</value>
</property>
</bean>
<bean id="syncAppTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="syncAppTask"/>
</property>
<property name="cronExpression">
<value>0 0/1 * * * ?</value>
</property>
</bean>

Cron常用的表达式

“0 0 12 ?” 每天中午12点触发
“0 15 10 ? “ 每天上午10:15触发
“0 15 10 ?” 每天上午10:15触发
“0 15 10 ? “ 每天上午10:15触发
“0 15 10
? 2005” 2005年的每天上午10:15触发
“0
14 ?” 在每天下午2点到下午2:59期间的每1分钟触发
“0 0/5 14 ?” 在每天下午2点到下午2:55期间的每5分钟触发
“0 0/5 14,18 ?” 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
“0 0-5 14 ?” 在每天下午2点到下午2:05期间的每1分钟触发
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44触发
“0 15 10 ? MON-FRI” 周一至周五的上午10:15触发
“0 15 10 15
?” 每月15日上午10:15触发 “0
15 10 L ?” 每月最后一日的上午10:15触发
“0 15 10 ?
6L” 每月的最后一个星期五上午10:15触发
“0 15 10 ? 6L 2002-2005” 2002年至2005年的每月的最后一个星期五上午10:15触发
“0 15 10 ?
6#3” 每月的第三个星期五上午10:15触发