定时任务
应用场景:电商项目中,如果一个订单如果长时间没有支付,那么则订单应该做超时处理.Quartz介绍Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Qu...
应用场景:电商项目中,如果一个订单如果长时间没有支付,那么则订单应该做超时处理.
Quartz介绍
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。
Quarez定时任务.可以在任何时间间隔内启动定时任务(JOB)
1.30秒执行一次,或者40秒/50秒执行一次
2.在一天内执行几次
3.可以执行一个月内执行几次
4.可以在一年内执行几次.
1.调度器
主要监控定时任务的时间,如果时间到了则开始运行任务
2.JOB
主要描述,做什么样的操作
3.触发器
当接收到调度器的指令后,运行指定的任务.
调用流程:
1.当一个任务定义之后(job),需要将任务的信息(任务处理类/方法)需要注册到调度器中.
2.调度器会实时的监控哪些任务需要马上执行.如果到了执行的时间则会调用触发器执行任务.
3.接收到处理任务后,触发器开启一个线程执行该任务.等待下一次任务的执行.
将将jar包文件添加到项目的parent中,之后打包
<!-- 定时任务 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<!--定时任务需要依赖c3p0jar包 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
调度器配置文件:
<!-- 定义任务bean -->
<bean name="paymentOrderJobDetail" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!-- 指定具体的job类 -->
<property name="jobClass" value="com.jt.order.job.PaymentOrderJob" />
<!-- 指定job的名称 -->
<property name="name" value="paymentOrder" />
<!-- 指定job的分组 -->
<property name="group" value="Order" />
<!-- 必须设置为true,如果为false,当没有活动的触发器与之关联时会在调度器中删除该任务 -->
<property name="durability" value="true"/>
<!-- 指定spring容器的key,如果不设定在job中的jobmap中是获取不到spring容器的 -->
<property name="applicationContextJobDataKey" value="applicationContext"/>
</bean>
<!-- 定义触发器 -->
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="paymentOrderJobDetail" />
<!-- 定义定时任务的时间表达式 每一分钟执行一次 -->
<property name="cronExpression" value="0 0/1 * * * ?" />
</bean>
<!-- 定义调度器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="cronTrigger" />
</list>
</property>
</bean>
定时任务处理类:
//定时任务的处理类
public class PaymentOrderJob extends QuartzJobBean{
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
//获取spring容器对象
ApplicationContext springContext =
(ApplicationContext)
context.getJobDetail().getJobDataMap().get("applicationContext");
//获取orderMapper接口
OrderMapper mapper =
springContext.getBean(OrderMapper.class);
//需要将超时的订单做过期处理
//**
/* 1.2天没有支付则超时
* 2.需要关闭未支付的订单 状态码为1改为6
* 3.
* sql:update 表名 set status = 6
* where status = 1 and created < new Date() - 2
*/
Date agoDate = new DateTime().minusDays(2).toDate();
//执行超时任务
mapper.updateStatus(agoDate);
System.out.println("定时任务操作成功!!!!!");
}
}
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)