一:定时任务组件(quartz)
1.应用场景(相当于闹钟,可以开发一个或者多个定时任务)
①:每天晚上12点生成当天的报表,第二天要看
②:订单超时
③:延时发送短信
2.定时任务组件Quartz(概念和demo)
1.Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。(demo)
①.引入依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
②.自定义一个MyJob类中写一个方法run()–要执行的任务类以及方法
public class MyJob {
public void run(){
System.out.println(new Date()+" 执行了");
}
}
③.提供Spring配置文件application-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等
<!--1.做什么事情 注册自定义Job(也就是自己做任务的类) -->
<bean id="jobDemo" class="com.taiping.jobs.MyJob"></bean>
<!--2.与spring进行集成 注册JobDetail,作用是负责通过反射调用指定的Job -->
<bean id="jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 注入目标对象 -->
<property name="targetObject" ref="jobDemo"/>
<!-- 注入目标方法(也就是自己做任务类中的方法) -->
<property name="targetMethod" value="run"/>
</bean>
<!--3.什么时间做 注册一个触发器,指定任务触发的时间(可以注册多个触发器(以下面的为一个单位),就比如定闹钟一样,可以定多个闹钟) -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 注入JobDetail -->
<property name="jobDetail" ref="jobDetail"/>
<!-- 指定触发的时间,基于Cron表达式 -->
<property name="cronExpression">
<value>0/5 * * * * ?</value>
</property>
</bean>
<!--4. 注册一个统一的调度工厂,通过这个调度工厂调度任务(这个调用触发器,进行调度任务的执行) -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 注入多个触发器(可以调度多个触发器) -->
<property name="triggers">
<list>
<ref bean="myTrigger"/>
<!-- <ref bean="myTrigger1"/>-->
</list>
</property>
</bean>
④.编写main方法进行测试
public class Application {
public static void main(String[] args) {
//加载配置文件
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:application-jobs.xml");
//启动
applicationContext.start();
}
⑤:执行main方法,之后任务就开始执行(每隔5秒执行一次,打印时间+执行了的语句)–完成
3.core表达式
①:0/10 * * * * *(每隔10秒从0秒开始执行一次)
②:cron表达式在线生成器—http://cron.qqe2.com/
4.定时任务的应用:
①:定时清理垃圾图片
②:定时发送短信
③:定时生成报表