任务:定时看有没有过期(put in time 和thing_time的计算),如果有的话给个推送(推送后面再做)
一、@Scheduled的使用
1 1.maven依赖 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-context-support</artifactId> 5 </dependency> 6 7 2.在启动类(springbootApplication)里面使能定时器 8 @EnableScheduling 9 10 3.定时任务类 11 。万能@component 12 。@Scheduled设置定时任务方法 13 。@Scheduled属性cron表达式: 14 定时任务触发时间的一个字符串表达式
二、Cron表达式
有两种语法结构:
1 1.七个域 2 Seconds Mintues Hours Month Weak Year 3 2.六个域 4 Seconds Mintues Hours Month Weak
各字段含义

(星期:1->星期日,7->星期六)

eg:

三、Quartz使用思路
1.思路:
1 1.job - 任务 - 要做什么 2 2.Trigger - 触发器 - 什么时候去做 3 3.Scheduler - 任务调度 - 什么时候需要去做什么
2.Quartz基本使用方式(用JAVASE做一个简单demo):
1 demo.java 2 1.定义任务类 3 //实现Job接口

1 main.java 2 1.job - 任务 - 要做什么 3 //创建Job对象 4 JobDetail job = JobBuilder.newJob(demo.class).build 5 6 2.Trigger - 触发器 - 什么时候去做 7 //第一种方法:简单的trigger触发时间:通过Quartz提供一个方法来完成简单的重复调用 8 Trigger trigger = TriggerBuilder.newTrigger().withSchedule( 9 SimpleScheduleBuilder.repeatSecondlyForever() 10 ).build 11 12 13 //第二种方法:cron Trigger:按照cron表达式来给定触发时间 14 Trigger trigger = TriggerBuilder.newTrigger().withSchedule( 15 CronShceduleBuilder.cronSchedule("0/1 * * * * ?") 16 ).build 17 18 19 3.Scheduler - 任务调度 - 什么时候需要去做什么 20 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 21 22 scheduler.scheduleJob(job, trigger); 23 24 4.启动
scheduler.start();
四、spring整合Quartz(SSM)
1.maven依赖
1 <!--Quartz坐标--> 2 <dependency> 3 <groupId>org.quartz-scheduler</groupId> 4 <artifactId>quartz</artifactId> 5 <version>2.2.1</version> 6 </dependency> 7 8 <!--添加Scheduled坐标--> 9 <dependency> 10 <groupId>org.springframework</groupId> 11 <artifactId>spring-context-support</artifactId> 12 </dependency> 13 14 <!--Sprngtx坐标--> 15 <dependency> 16 <groupId>org.springframework</groupId> 17 <artifactId>spring-tx</artifactId> 18 </dependency>
2.Job任务类
3.Quartz配置类
1 1.@Configuartion注解 2 2.按Quartz的思路写配置 3 。创建Job对象并实例化 4 @Bean 5 public JobDetailFactoryBean jobDetailFactoryBean(){ 6 JobDetailFactoryBean factory = new JobDetailFactoryBean(); 7 8 9 factory.setJobClass(QuartzDemo.class); 10 //关联上一步写的Job类 11 return factory; 12 } 13 。创建Trigger对象 14 方法一 15 : @Bean 16 public SimpleTriggerFactoryBean 17 simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){ 18 SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean(); 19 20 factory.setJobDetail(jobDetailFactoryBean.getObject()); //关联jobDetail对象 21 factory.setRepeatInterval(2000); 22 //设置触发时间 该参数表示一个执行的毫秒数 23 factory.setReatCount(5); //设置重复次数 24 return factory; 25 } 26 方法二: 27 @Bean 28 public CronTriggerFactoryBean CronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){ 29 CronTriggerFactoryBean factory = new CronTriggerFactoryBean(); 30 factory.setJobDetail(jobDetailFactoryBean.getObject()); //关联jobDetail对象 31 factory.setCronExpression("0/1 * * * * ?"); //设置触发时间 32 return factory; 33 } 34 (由于需要关联,此方法对应的ScheduleFactoryBean的入参也要修改成CronTriggerFactoryBean) 35 。创建Schedule对象 36 @Bean 37 public ScheduleFactoryBean ScheduleFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){ 38 ScheduleFactoryBean factory = new ScheduleFactoryBean(); 39 factory.setTriggers(simpleTriggerFactoryBean.getObject()); //关联trigger 40 return factory; 41 }
4.启动类(springbootApplication)
1 。@EnableSchedule
五、job对象注入
1.job类中对service层的要实现的类注入
1 。使用@Autowired
2.写一个新的AdaptableFactory
(由于原来的job对象实例化时使用的jobDetailFactoryBean factory 只是采用反射的机制,SpringIOC容器里面没有这个类所以无法直接成功注入,要写一个新的AdaptableFactory,重写里面的createJobInstance方法,手动将创建的对象放到springioc容器中)
1 package com.bjsxt.config; 2 3 import org.quartz.spi.TriggerFiredBundle; 4 import org.springframework.scheduling.quartz.AdaptableJobFactory; 5 6 @Component("myAdaptableJobFactory") 7 public class MyAdaptableJobFactory extends AdaptableJobFactory{ 8 //AutowireCapableBeanFactory 可以将一个对象添加到springioc容器中并且完成对象注入 9 @Autowired 10 private AutowireCapableBeanFactory autowireCapableBeanFactory; 11 //该方法需要将实例化的任务对象手动的添加到springIOC容器中并且完成对象的注入 12 @ Override 13 protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception{ 14 Object obj = super. createJobInstance(bundle); 15 //将obj对象添加到springioc并完成注入 16 this.autowireCapableBeanFactory.autowireBean(obj); 17 return obj; 18 } 19 }
3.在配置类的Scheduler对象创建方法里面修改调用刚才写的新AdaptableFactory
1 @Bean 2 public ScheduleFactoryBean ScheduleFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean){ 3 ScheduleFactoryBean factory = new ScheduleFactoryBean(); 4 factory.setTriggers(simpleTriggerFactoryBean.getObject()); //关联trigger 5 factory.setJobFactory("myAdaptableFactory"); //新AdaptableFactory 6 return factory; 7 }
浙公网安备 33010602011771号