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