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); } }
|